// $ANTLR 3.0.1 JavaASTSecondPass.g 2008-07-10 18:18:48

	package patternmining.model.construction;
	
	import java.util.List;
	import java.util.ArrayList;


import org.antlr.runtime.*;
import org.antlr.runtime.tree.*;import java.util.Stack;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;

class JavaASTSecondPass extends TreeParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "AND", "AND_ASSIGN", "ASSIGN", "AT", "BIT_SHIFT_RIGHT", "BIT_SHIFT_RIGHT_ASSIGN", "COLON", "COMMA", "DEC", "DIV", "DIV_ASSIGN", "DOT", "DOTSTAR", "ELLIPSIS", "EQUAL", "GREATER_OR_EQUAL", "GREATER_THAN", "INC", "LBRACK", "LCURLY", "LESS_OR_EQUAL", "LESS_THAN", "LOGICAL_AND", "LOGICAL_NOT", "LOGICAL_OR", "LPAREN", "MINUS", "MINUS_ASSIGN", "MOD", "MOD_ASSIGN", "NOT", "NOT_EQUAL", "OR", "OR_ASSIGN", "PLUS", "PLUS_ASSIGN", "QUESTION", "RBRACK", "RCURLY", "RPAREN", "SEMI", "SHIFT_LEFT", "SHIFT_LEFT_ASSIGN", "SHIFT_RIGHT", "SHIFT_RIGHT_ASSIGN", "STAR", "STAR_ASSIGN", "XOR", "XOR_ASSIGN", "ABSTRACT", "ASSERT", "BOOLEAN", "BREAK", "BYTE", "CASE", "CATCH", "CHAR", "CLASS", "CONTINUE", "DEFAULT", "DO", "DOUBLE", "ELSE", "ENUM", "EXTENDS", "FALSE", "FINAL", "FINALLY", "FLOAT", "FOR", "IF", "IMPLEMENTS", "INSTANCEOF", "INTERFACE", "IMPORT", "INT", "LONG", "NATIVE", "NEW", "NULL", "PACKAGE", "PRIVATE", "PROTECTED", "PUBLIC", "RETURN", "SHORT", "STATIC", "STRICTFP", "SUPER", "SWITCH", "SYNCHRONIZED", "THIS", "THROW", "THROWS", "TRANSIENT", "TRUE", "TRY", "VOID", "VOLATILE", "WHILE", "ANNOTATION_INIT_ARRAY_ELEMENT", "ANNOTATION_INIT_BLOCK", "ANNOTATION_INIT_DEFAULT_KEY", "ANNOTATION_INIT_KEY_LIST", "ANNOTATION_LIST", "ANNOTATION_METHOD_DECL", "ANNOTATION_SCOPE", "ANNOTATION_TOP_LEVEL_SCOPE", "ARGUMENT_LIST", "ARRAY_DECLARATOR", "ARRAY_DECLARATOR_LIST", "ARRAY_ELEMENT_ACCESS", "ARRAY_INITIALIZER", "BLOCK_SCOPE", "CAST_EXPR", "CATCH_CLAUSE_LIST", "CLASS_CONSTRUCTOR_CALL", "CLASS_INSTANCE_INITIALIZER", "CLASS_STATIC_INITIALIZER", "CLASS_TOP_LEVEL_SCOPE", "CONSTRUCTOR_DECL", "ENUM_TOP_LEVEL_SCOPE", "EXPR", "EXTENDS_BOUND_LIST", "EXTENDS_CLAUSE", "FOR_CONDITION", "FOR_EACH", "FOR_INIT", "FOR_UPDATE", "FORMAL_PARAM_LIST", "FORMAL_PARAM_STD_DECL", "FORMAL_PARAM_VARARG_DECL", "FUNCTION_METHOD_DECL", "GENERIC_TYPE_ARG_LIST", "GENERIC_TYPE_PARAM_LIST", "INTERFACE_TOP_LEVEL_SCOPE", "IMPLEMENTS_CLAUSE", "LABELED_STATEMENT", "LOCAL_MODIFIER_LIST", "JAVA_SOURCE", "METHOD_CALL", "MODIFIER_LIST", "PARENTESIZED_EXPR", "POST_DEC", "POST_INC", "PRE_DEC", "PRE_INC", "QUALIFIED_TYPE_IDENT", "STATIC_ARRAY_CREATOR", "SUPER_CONSTRUCTOR_CALL", "SWITCH_BLOCK_LABEL_LIST", "THIS_CONSTRUCTOR_CALL", "THROWS_CLAUSE", "TYPE", "UNARY_MINUS", "UNARY_PLUS", "VAR_DECLARATION", "VAR_DECLARATOR", "VAR_DECLARATOR_LIST", "VOID_METHOD_DECL", "IDENT", "HEX_LITERAL", "OCTAL_LITERAL", "DECIMAL_LITERAL", "FLOATING_POINT_LITERAL", "CHARACTER_LITERAL", "STRING_LITERAL", "HEX_DIGIT", "INTEGER_TYPE_SUFFIX", "EXPONENT", "FLOAT_TYPE_SUFFIX", "ESCAPE_SEQUENCE", "UNICODE_ESCAPE", "OCTAL_ESCAPE", "JAVA_ID_START", "JAVA_ID_PART", "WS", "COMMENT", "LINE_COMMENT"
    };
    public static final int PACKAGE=84;
    public static final int EXPONENT=173;
    public static final int STAR=49;
    public static final int WHILE=103;
    public static final int MOD=32;
    public static final int MOD_ASSIGN=33;
    public static final int CASE=58;
    public static final int CHAR=60;
    public static final int NEW=82;
    public static final int DO=64;
    public static final int GENERIC_TYPE_PARAM_LIST=138;
    public static final int CLASS_INSTANCE_INITIALIZER=121;
    public static final int ARRAY_ELEMENT_ACCESS=115;
    public static final int FOR_CONDITION=129;
    public static final int NOT=34;
    public static final int VAR_DECLARATION=160;
    public static final int ANNOTATION_METHOD_DECL=109;
    public static final int EOF=-1;
    public static final int DIV_ASSIGN=14;
    public static final int BREAK=56;
    public static final int LOGICAL_AND=26;
    public static final int BIT_SHIFT_RIGHT_ASSIGN=9;
    public static final int UNARY_PLUS=159;
    public static final int TYPE=157;
    public static final int FINAL=70;
    public static final int INC=21;
    public static final int RPAREN=43;
    public static final int IMPORT=78;
    public static final int STRING_LITERAL=170;
    public static final int FOR_UPDATE=132;
    public static final int FLOATING_POINT_LITERAL=168;
    public static final int CAST_EXPR=118;
    public static final int NOT_EQUAL=35;
    public static final int VOID_METHOD_DECL=163;
    public static final int RETURN=88;
    public static final int THIS=95;
    public static final int DOUBLE=65;
    public static final int VOID=101;
    public static final int ENUM_TOP_LEVEL_SCOPE=125;
    public static final int SUPER=92;
    public static final int COMMENT=181;
    public static final int ANNOTATION_INIT_KEY_LIST=107;
    public static final int JAVA_ID_START=178;
    public static final int FLOAT_TYPE_SUFFIX=174;
    public static final int PRE_DEC=149;
    public static final int RBRACK=41;
    public static final int IMPLEMENTS_CLAUSE=140;
    public static final int SWITCH_BLOCK_LABEL_LIST=154;
    public static final int LINE_COMMENT=182;
    public static final int PRIVATE=85;
    public static final int STATIC=90;
    public static final int BLOCK_SCOPE=117;
    public static final int ANNOTATION_INIT_DEFAULT_KEY=106;
    public static final int SWITCH=93;
    public static final int NULL=83;
    public static final int VAR_DECLARATOR=161;
    public static final int MINUS_ASSIGN=31;
    public static final int ELSE=66;
    public static final int STRICTFP=91;
    public static final int CHARACTER_LITERAL=169;
    public static final int PRE_INC=150;
    public static final int ANNOTATION_LIST=108;
    public static final int ELLIPSIS=17;
    public static final int NATIVE=81;
    public static final int OCTAL_ESCAPE=177;
    public static final int UNARY_MINUS=158;
    public static final int THROWS=97;
    public static final int LCURLY=23;
    public static final int INT=79;
    public static final int FORMAL_PARAM_VARARG_DECL=135;
    public static final int METHOD_CALL=144;
    public static final int ASSERT=54;
    public static final int TRY=100;
    public static final int INTERFACE_TOP_LEVEL_SCOPE=139;
    public static final int SHIFT_LEFT=45;
    public static final int WS=180;
    public static final int SHIFT_RIGHT=47;
    public static final int FORMAL_PARAM_STD_DECL=134;
    public static final int LOCAL_MODIFIER_LIST=142;
    public static final int OR=36;
    public static final int LESS_THAN=25;
    public static final int SHIFT_RIGHT_ASSIGN=48;
    public static final int EXTENDS_BOUND_LIST=127;
    public static final int JAVA_SOURCE=143;
    public static final int CATCH=59;
    public static final int FALSE=69;
    public static final int INTEGER_TYPE_SUFFIX=172;
    public static final int DECIMAL_LITERAL=167;
    public static final int THROW=96;
    public static final int FOR_INIT=131;
    public static final int PROTECTED=86;
    public static final int DEC=12;
    public static final int CLASS=61;
    public static final int LBRACK=22;
    public static final int BIT_SHIFT_RIGHT=8;
    public static final int THROWS_CLAUSE=156;
    public static final int GREATER_OR_EQUAL=19;
    public static final int FOR=73;
    public static final int LOGICAL_NOT=27;
    public static final int THIS_CONSTRUCTOR_CALL=155;
    public static final int FLOAT=72;
    public static final int ABSTRACT=53;
    public static final int AND=4;
    public static final int POST_DEC=147;
    public static final int AND_ASSIGN=5;
    public static final int ANNOTATION_SCOPE=110;
    public static final int MODIFIER_LIST=145;
    public static final int STATIC_ARRAY_CREATOR=152;
    public static final int LPAREN=29;
    public static final int IF=74;
    public static final int AT=7;
    public static final int CONSTRUCTOR_DECL=124;
    public static final int ESCAPE_SEQUENCE=175;
    public static final int LABELED_STATEMENT=141;
    public static final int UNICODE_ESCAPE=176;
    public static final int BOOLEAN=55;
    public static final int SYNCHRONIZED=94;
    public static final int EXPR=126;
    public static final int CLASS_TOP_LEVEL_SCOPE=123;
    public static final int IMPLEMENTS=75;
    public static final int CONTINUE=62;
    public static final int COMMA=11;
    public static final int TRANSIENT=98;
    public static final int XOR_ASSIGN=52;
    public static final int EQUAL=18;
    public static final int LOGICAL_OR=28;
    public static final int ARGUMENT_LIST=112;
    public static final int QUALIFIED_TYPE_IDENT=151;
    public static final int IDENT=164;
    public static final int PLUS=38;
    public static final int ANNOTATION_INIT_BLOCK=105;
    public static final int HEX_LITERAL=165;
    public static final int DOT=15;
    public static final int SHIFT_LEFT_ASSIGN=46;
    public static final int FORMAL_PARAM_LIST=133;
    public static final int GENERIC_TYPE_ARG_LIST=137;
    public static final int DOTSTAR=16;
    public static final int ANNOTATION_TOP_LEVEL_SCOPE=111;
    public static final int BYTE=57;
    public static final int XOR=51;
    public static final int JAVA_ID_PART=179;
    public static final int GREATER_THAN=20;
    public static final int VOLATILE=102;
    public static final int PARENTESIZED_EXPR=146;
    public static final int LESS_OR_EQUAL=24;
    public static final int ARRAY_DECLARATOR_LIST=114;
    public static final int CLASS_STATIC_INITIALIZER=122;
    public static final int DEFAULT=63;
    public static final int OCTAL_LITERAL=166;
    public static final int HEX_DIGIT=171;
    public static final int SHORT=89;
    public static final int INSTANCEOF=76;
    public static final int MINUS=30;
    public static final int SEMI=44;
    public static final int TRUE=99;
    public static final int EXTENDS_CLAUSE=128;
    public static final int STAR_ASSIGN=50;
    public static final int VAR_DECLARATOR_LIST=162;
    public static final int COLON=10;
    public static final int ARRAY_DECLARATOR=113;
    public static final int OR_ASSIGN=37;
    public static final int ENUM=67;
    public static final int QUESTION=40;
    public static final int FINALLY=71;
    public static final int RCURLY=42;
    public static final int ASSIGN=6;
    public static final int PLUS_ASSIGN=39;
    public static final int ANNOTATION_INIT_ARRAY_ELEMENT=104;
    public static final int FUNCTION_METHOD_DECL=136;
    public static final int INTERFACE=77;
    public static final int DIV=13;
    public static final int POST_INC=148;
    public static final int LONG=80;
    public static final int CLASS_CONSTRUCTOR_CALL=120;
    public static final int PUBLIC=87;
    public static final int EXTENDS=68;
    public static final int FOR_EACH=130;
    public static final int ARRAY_INITIALIZER=116;
    public static final int CATCH_CLAUSE_LIST=119;
    public static final int SUPER_CONSTRUCTOR_CALL=153;

        public JavaASTSecondPass(TreeNodeStream input) {
            super(input);
            ruleMemo = new HashMap[288+1];
         }
        

    public String[] getTokenNames() { return tokenNames; }
    public String getGrammarFileName() { return "JavaASTSecondPass.g"; }

    
        
        boolean mMessageCollectionEnabled = false;
        private boolean mHasErrors = false;
        List<String> mMessages;
    
        /**
         *  Switches error message collection on or of.
         *
         *  The standard destination for parser error messages is <code>System.err</code>.
         *  However, if <code>true</code> gets passed to this method this default
         *  behaviour will be switched off and all error messages will be collected
         *  instead of written to anywhere.
         *
         *  The default value is <code>false</code>.
         *
         *  @param pNewState  <code>true</code> if error messages should be collected.
         */
        public void enableErrorMessageCollection(boolean pNewState) {
            mMessageCollectionEnabled = pNewState;
            if (mMessages == null && mMessageCollectionEnabled) {
                mMessages = new ArrayList<String>();
            }
        }
        
        /**
         *  Collects an error message or passes the error message to <code>
         *  super.emitErrorMessage(...)</code>.
         *
         *  The actual behaviour depends on whether collecting error messages
         *  has been enabled or not.
         *
         *  @param pMessage  The error message.
         */
         @Override
        public void emitErrorMessage(String pMessage) {
            if (mMessageCollectionEnabled) {
                mMessages.add(pMessage);
            } else {
                super.emitErrorMessage(pMessage);
            }
        }
        
        /**
         *  Returns collected error messages.
         *
         *  @return  A list holding collected error messages or <code>null</code> if
         *           collecting error messages hasn't been enabled. Of course, this
         *           list may be empty if no error message has been emited.
         */
        public List<String> getMessages() {
            return mMessages;
        }
        
        /**
         *  Tells if parsing a Java source has caused any error messages.
         *
         *  @return  <code>true</code> if parsing a Java source has caused at least one error message.
         */
        public boolean hasErrors() {
            return mHasErrors;
        }
        
        
        /** Members used in the extraction of the source information relevant to the program graph construction
        *
        * Atributes
        */
       	private String packagePrefix;
    	private String thisTypeName;
    	private String currentMethodName;
    	private List<String> currentParameterTypeList;
    	private PackageIndex packages;
    	private MethodNameResolver methodResolver;
    	private TypeNameQualifier typeNameQualifier;
    	private AttributeTypeResolver attributeResolver;
    	private String currentVarType = null;
    	
    	/* Alternative constructor to pass the shared ModelData object to this tree parser
    	*/
    	public JavaASTSecondPass(TreeNodeStream input, PackageIndex packages, MethodNameResolver methodResolver){
    		this(input);
    		packagePrefix = "default";
    		this.packages = packages;
    		this.methodResolver = methodResolver;
    		this.typeNameQualifier = new TypeNameQualifier(packages, packagePrefix );
    	}
        
        /*Method to obtain the collected Data
        */
        public TypeNameQualifier getTypeNameQualifier(){
        	return typeNameQualifier;
        }
        
        public AttributeTypeResolver getAttributeTypeResolver(){
        	return attributeResolver;
        }
        
        public MethodNameResolver getMethodNameResolver(){
        	return methodResolver;
        }
        



    // $ANTLR start javaSource
    // JavaASTSecondPass.g:167:1: javaSource : ^( JAVA_SOURCE annotationList ( packageDeclaration )? ( importDeclaration )* ( typeDeclaration )* ) ;
    public final void javaSource() throws RecognitionException {
        int javaSource_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 1) ) { return ; }
            // JavaASTSecondPass.g:168:5: ( ^( JAVA_SOURCE annotationList ( packageDeclaration )? ( importDeclaration )* ( typeDeclaration )* ) )
            // JavaASTSecondPass.g:168:9: ^( JAVA_SOURCE annotationList ( packageDeclaration )? ( importDeclaration )* ( typeDeclaration )* )
            {
            match(input,JAVA_SOURCE,FOLLOW_JAVA_SOURCE_in_javaSource96); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            pushFollow(FOLLOW_annotationList_in_javaSource98);
            annotationList();
            _fsp--;
            if (failed) return ;
            // JavaASTSecondPass.g:168:38: ( packageDeclaration )?
            int alt1=2;
            int LA1_0 = input.LA(1);

            if ( (LA1_0==PACKAGE) ) {
                alt1=1;
            }
            switch (alt1) {
                case 1 :
                    // JavaASTSecondPass.g:0:0: packageDeclaration
                    {
                    pushFollow(FOLLOW_packageDeclaration_in_javaSource100);
                    packageDeclaration();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;

            }

            // JavaASTSecondPass.g:168:58: ( importDeclaration )*
            loop2:
            do {
                int alt2=2;
                int LA2_0 = input.LA(1);

                if ( (LA2_0==IMPORT) ) {
                    alt2=1;
                }


                switch (alt2) {
            	case 1 :
            	    // JavaASTSecondPass.g:0:0: importDeclaration
            	    {
            	    pushFollow(FOLLOW_importDeclaration_in_javaSource103);
            	    importDeclaration();
            	    _fsp--;
            	    if (failed) return ;

            	    }
            	    break;

            	default :
            	    break loop2;
                }
            } while (true);

            // JavaASTSecondPass.g:168:77: ( typeDeclaration )*
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( (LA3_0==AT||LA3_0==CLASS||LA3_0==ENUM||LA3_0==INTERFACE) ) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // JavaASTSecondPass.g:0:0: typeDeclaration
            	    {
            	    pushFollow(FOLLOW_typeDeclaration_in_javaSource106);
            	    typeDeclaration();
            	    _fsp--;
            	    if (failed) return ;

            	    }
            	    break;

            	default :
            	    break loop3;
                }
            } while (true);


            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 1, javaSource_StartIndex); }
        }
        return ;
    }
    // $ANTLR end javaSource


    // $ANTLR start packageDeclaration
    // JavaASTSecondPass.g:171:1: packageDeclaration : ^( PACKAGE temp= qualifiedIdentifier ) ;
    public final void packageDeclaration() throws RecognitionException {
        int packageDeclaration_StartIndex = input.index();
        qualifiedIdentifier_return temp = null;


        try {
            if ( backtracking>0 && alreadyParsedRule(input, 2) ) { return ; }
            // JavaASTSecondPass.g:172:2: ( ^( PACKAGE temp= qualifiedIdentifier ) )
            // JavaASTSecondPass.g:172:6: ^( PACKAGE temp= qualifiedIdentifier )
            {
            match(input,PACKAGE,FOLLOW_PACKAGE_in_packageDeclaration125); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            pushFollow(FOLLOW_qualifiedIdentifier_in_packageDeclaration129);
            temp=qualifiedIdentifier();
            _fsp--;
            if (failed) return ;

            match(input, Token.UP, null); if (failed) return ;
            if ( backtracking==0 ) {
              
              			packagePrefix = input.getTokenStream().toString(
                input.getTreeAdaptor().getTokenStartIndex(temp.start),
                input.getTreeAdaptor().getTokenStopIndex(temp.start));
              			typeNameQualifier = new TypeNameQualifier( packages, packagePrefix );
              		
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 2, packageDeclaration_StartIndex); }
        }
        return ;
    }
    // $ANTLR end packageDeclaration


    // $ANTLR start importDeclaration
    // JavaASTSecondPass.g:179:1: importDeclaration : ^( IMPORT ( STATIC )? temp= qualifiedIdentifier ( DOTSTAR )? ) ;
    public final void importDeclaration() throws RecognitionException {
        int importDeclaration_StartIndex = input.index();
        CommonTree DOTSTAR1=null;
        qualifiedIdentifier_return temp = null;


        try {
            if ( backtracking>0 && alreadyParsedRule(input, 3) ) { return ; }
            // JavaASTSecondPass.g:180:5: ( ^( IMPORT ( STATIC )? temp= qualifiedIdentifier ( DOTSTAR )? ) )
            // JavaASTSecondPass.g:180:9: ^( IMPORT ( STATIC )? temp= qualifiedIdentifier ( DOTSTAR )? )
            {
            match(input,IMPORT,FOLLOW_IMPORT_in_importDeclaration157); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            // JavaASTSecondPass.g:180:18: ( STATIC )?
            int alt4=2;
            int LA4_0 = input.LA(1);

            if ( (LA4_0==STATIC) ) {
                alt4=1;
            }
            switch (alt4) {
                case 1 :
                    // JavaASTSecondPass.g:0:0: STATIC
                    {
                    match(input,STATIC,FOLLOW_STATIC_in_importDeclaration159); if (failed) return ;

                    }
                    break;

            }

            pushFollow(FOLLOW_qualifiedIdentifier_in_importDeclaration164);
            temp=qualifiedIdentifier();
            _fsp--;
            if (failed) return ;
            // JavaASTSecondPass.g:180:51: ( DOTSTAR )?
            int alt5=2;
            int LA5_0 = input.LA(1);

            if ( (LA5_0==DOTSTAR) ) {
                alt5=1;
            }
            switch (alt5) {
                case 1 :
                    // JavaASTSecondPass.g:0:0: DOTSTAR
                    {
                    DOTSTAR1=(CommonTree)input.LT(1);
                    match(input,DOTSTAR,FOLLOW_DOTSTAR_in_importDeclaration166); if (failed) return ;

                    }
                    break;

            }


            match(input, Token.UP, null); if (failed) return ;
            if ( backtracking==0 ) {
              
                  		if( DOTSTAR1 == null)	typeNameQualifier.addSingleTypeImport(input.getTokenStream().toString(
                input.getTreeAdaptor().getTokenStartIndex(temp.start),
                input.getTreeAdaptor().getTokenStopIndex(temp.start)));
                  		else					typeNameQualifier.addPackageImport(input.getTokenStream().toString(
                input.getTreeAdaptor().getTokenStartIndex(temp.start),
                input.getTreeAdaptor().getTokenStopIndex(temp.start)));
                  	
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 3, importDeclaration_StartIndex); }
        }
        return ;
    }
    // $ANTLR end importDeclaration


    // $ANTLR start typeDeclaration
    // JavaASTSecondPass.g:187:1: typeDeclaration : ( ^( CLASS modifierList temp= IDENT ( genericTypeParameterList )? ( extendsClause )? ( implementsClause )? classTopLevelScope ) | ^( INTERFACE modifierList temp= IDENT ( genericTypeParameterList )? ( extendsClause )? interfaceTopLevelScope ) | ^( ENUM modifierList temp= IDENT ( implementsClause )? enumTopLevelScope ) | ^( AT modifierList IDENT annotationTopLevelScope ) );
    public final void typeDeclaration() throws RecognitionException {
        int typeDeclaration_StartIndex = input.index();
        CommonTree temp=null;

        try {
            if ( backtracking>0 && alreadyParsedRule(input, 4) ) { return ; }
            // JavaASTSecondPass.g:188:5: ( ^( CLASS modifierList temp= IDENT ( genericTypeParameterList )? ( extendsClause )? ( implementsClause )? classTopLevelScope ) | ^( INTERFACE modifierList temp= IDENT ( genericTypeParameterList )? ( extendsClause )? interfaceTopLevelScope ) | ^( ENUM modifierList temp= IDENT ( implementsClause )? enumTopLevelScope ) | ^( AT modifierList IDENT annotationTopLevelScope ) )
            int alt12=4;
            switch ( input.LA(1) ) {
            case CLASS:
                {
                alt12=1;
                }
                break;
            case INTERFACE:
                {
                alt12=2;
                }
                break;
            case ENUM:
                {
                alt12=3;
                }
                break;
            case AT:
                {
                alt12=4;
                }
                break;
            default:
                if (backtracking>0) {failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("187:1: typeDeclaration : ( ^( CLASS modifierList temp= IDENT ( genericTypeParameterList )? ( extendsClause )? ( implementsClause )? classTopLevelScope ) | ^( INTERFACE modifierList temp= IDENT ( genericTypeParameterList )? ( extendsClause )? interfaceTopLevelScope ) | ^( ENUM modifierList temp= IDENT ( implementsClause )? enumTopLevelScope ) | ^( AT modifierList IDENT annotationTopLevelScope ) );", 12, 0, input);

                throw nvae;
            }

            switch (alt12) {
                case 1 :
                    // JavaASTSecondPass.g:188:9: ^( CLASS modifierList temp= IDENT ( genericTypeParameterList )? ( extendsClause )? ( implementsClause )? classTopLevelScope )
                    {
                    match(input,CLASS,FOLLOW_CLASS_in_typeDeclaration199); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_modifierList_in_typeDeclaration201);
                    modifierList();
                    _fsp--;
                    if (failed) return ;
                    temp=(CommonTree)input.LT(1);
                    match(input,IDENT,FOLLOW_IDENT_in_typeDeclaration205); if (failed) return ;
                    if ( backtracking==0 ) {
                      
                          		thisTypeName = packagePrefix + "." + temp.getText();
                          		attributeResolver = new AttributeTypeResolver( thisTypeName );
                          	
                    }
                    // JavaASTSecondPass.g:193:6: ( genericTypeParameterList )?
                    int alt6=2;
                    int LA6_0 = input.LA(1);

                    if ( (LA6_0==GENERIC_TYPE_PARAM_LIST) ) {
                        alt6=1;
                    }
                    switch (alt6) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: genericTypeParameterList
                            {
                            pushFollow(FOLLOW_genericTypeParameterList_in_typeDeclaration219);
                            genericTypeParameterList();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    // JavaASTSecondPass.g:193:32: ( extendsClause )?
                    int alt7=2;
                    int LA7_0 = input.LA(1);

                    if ( (LA7_0==EXTENDS_CLAUSE) ) {
                        alt7=1;
                    }
                    switch (alt7) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: extendsClause
                            {
                            pushFollow(FOLLOW_extendsClause_in_typeDeclaration222);
                            extendsClause();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    // JavaASTSecondPass.g:193:47: ( implementsClause )?
                    int alt8=2;
                    int LA8_0 = input.LA(1);

                    if ( (LA8_0==IMPLEMENTS_CLAUSE) ) {
                        alt8=1;
                    }
                    switch (alt8) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: implementsClause
                            {
                            pushFollow(FOLLOW_implementsClause_in_typeDeclaration225);
                            implementsClause();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    pushFollow(FOLLOW_classTopLevelScope_in_typeDeclaration228);
                    classTopLevelScope();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:195:9: ^( INTERFACE modifierList temp= IDENT ( genericTypeParameterList )? ( extendsClause )? interfaceTopLevelScope )
                    {
                    match(input,INTERFACE,FOLLOW_INTERFACE_in_typeDeclaration248); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_modifierList_in_typeDeclaration250);
                    modifierList();
                    _fsp--;
                    if (failed) return ;
                    temp=(CommonTree)input.LT(1);
                    match(input,IDENT,FOLLOW_IDENT_in_typeDeclaration254); if (failed) return ;
                    if ( backtracking==0 ) {
                      
                          		thisTypeName = packagePrefix + "." + temp.getText();
                          		attributeResolver = new AttributeTypeResolver( thisTypeName );
                          	
                    }
                    // JavaASTSecondPass.g:200:6: ( genericTypeParameterList )?
                    int alt9=2;
                    int LA9_0 = input.LA(1);

                    if ( (LA9_0==GENERIC_TYPE_PARAM_LIST) ) {
                        alt9=1;
                    }
                    switch (alt9) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: genericTypeParameterList
                            {
                            pushFollow(FOLLOW_genericTypeParameterList_in_typeDeclaration268);
                            genericTypeParameterList();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    // JavaASTSecondPass.g:200:32: ( extendsClause )?
                    int alt10=2;
                    int LA10_0 = input.LA(1);

                    if ( (LA10_0==EXTENDS_CLAUSE) ) {
                        alt10=1;
                    }
                    switch (alt10) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: extendsClause
                            {
                            pushFollow(FOLLOW_extendsClause_in_typeDeclaration271);
                            extendsClause();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    pushFollow(FOLLOW_interfaceTopLevelScope_in_typeDeclaration274);
                    interfaceTopLevelScope();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 3 :
                    // JavaASTSecondPass.g:202:9: ^( ENUM modifierList temp= IDENT ( implementsClause )? enumTopLevelScope )
                    {
                    match(input,ENUM,FOLLOW_ENUM_in_typeDeclaration292); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_modifierList_in_typeDeclaration294);
                    modifierList();
                    _fsp--;
                    if (failed) return ;
                    temp=(CommonTree)input.LT(1);
                    match(input,IDENT,FOLLOW_IDENT_in_typeDeclaration298); if (failed) return ;
                    if ( backtracking==0 ) {
                      
                          		thisTypeName = packagePrefix + "." + temp.getText();
                          		attributeResolver = new AttributeTypeResolver( thisTypeName );
                          	
                    }
                    // JavaASTSecondPass.g:207:6: ( implementsClause )?
                    int alt11=2;
                    int LA11_0 = input.LA(1);

                    if ( (LA11_0==IMPLEMENTS_CLAUSE) ) {
                        alt11=1;
                    }
                    switch (alt11) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: implementsClause
                            {
                            pushFollow(FOLLOW_implementsClause_in_typeDeclaration312);
                            implementsClause();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    pushFollow(FOLLOW_enumTopLevelScope_in_typeDeclaration315);
                    enumTopLevelScope();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 4 :
                    // JavaASTSecondPass.g:209:9: ^( AT modifierList IDENT annotationTopLevelScope )
                    {
                    match(input,AT,FOLLOW_AT_in_typeDeclaration333); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_modifierList_in_typeDeclaration335);
                    modifierList();
                    _fsp--;
                    if (failed) return ;
                    match(input,IDENT,FOLLOW_IDENT_in_typeDeclaration337); if (failed) return ;
                    pushFollow(FOLLOW_annotationTopLevelScope_in_typeDeclaration339);
                    annotationTopLevelScope();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 4, typeDeclaration_StartIndex); }
        }
        return ;
    }
    // $ANTLR end typeDeclaration


    // $ANTLR start extendsClause
    // JavaASTSecondPass.g:213:1: extendsClause : ^( EXTENDS_CLAUSE ( type )+ ) ;
    public final void extendsClause() throws RecognitionException {
        int extendsClause_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 5) ) { return ; }
            // JavaASTSecondPass.g:215:5: ( ^( EXTENDS_CLAUSE ( type )+ ) )
            // JavaASTSecondPass.g:215:9: ^( EXTENDS_CLAUSE ( type )+ )
            {
            match(input,EXTENDS_CLAUSE,FOLLOW_EXTENDS_CLAUSE_in_extendsClause382); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            // JavaASTSecondPass.g:215:26: ( type )+
            int cnt13=0;
            loop13:
            do {
                int alt13=2;
                int LA13_0 = input.LA(1);

                if ( (LA13_0==TYPE) ) {
                    alt13=1;
                }


                switch (alt13) {
            	case 1 :
            	    // JavaASTSecondPass.g:0:0: type
            	    {
            	    pushFollow(FOLLOW_type_in_extendsClause384);
            	    type();
            	    _fsp--;
            	    if (failed) return ;

            	    }
            	    break;

            	default :
            	    if ( cnt13 >= 1 ) break loop13;
            	    if (backtracking>0) {failed=true; return ;}
                        EarlyExitException eee =
                            new EarlyExitException(13, input);
                        throw eee;
                }
                cnt13++;
            } while (true);


            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 5, extendsClause_StartIndex); }
        }
        return ;
    }
    // $ANTLR end extendsClause


    // $ANTLR start implementsClause
    // JavaASTSecondPass.g:218:1: implementsClause : ^( IMPLEMENTS_CLAUSE ( type )+ ) ;
    public final void implementsClause() throws RecognitionException {
        int implementsClause_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 6) ) { return ; }
            // JavaASTSecondPass.g:219:5: ( ^( IMPLEMENTS_CLAUSE ( type )+ ) )
            // JavaASTSecondPass.g:219:9: ^( IMPLEMENTS_CLAUSE ( type )+ )
            {
            match(input,IMPLEMENTS_CLAUSE,FOLLOW_IMPLEMENTS_CLAUSE_in_implementsClause413); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            // JavaASTSecondPass.g:219:29: ( type )+
            int cnt14=0;
            loop14:
            do {
                int alt14=2;
                int LA14_0 = input.LA(1);

                if ( (LA14_0==TYPE) ) {
                    alt14=1;
                }


                switch (alt14) {
            	case 1 :
            	    // JavaASTSecondPass.g:0:0: type
            	    {
            	    pushFollow(FOLLOW_type_in_implementsClause415);
            	    type();
            	    _fsp--;
            	    if (failed) return ;

            	    }
            	    break;

            	default :
            	    if ( cnt14 >= 1 ) break loop14;
            	    if (backtracking>0) {failed=true; return ;}
                        EarlyExitException eee =
                            new EarlyExitException(14, input);
                        throw eee;
                }
                cnt14++;
            } while (true);


            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 6, implementsClause_StartIndex); }
        }
        return ;
    }
    // $ANTLR end implementsClause


    // $ANTLR start genericTypeParameterList
    // JavaASTSecondPass.g:222:1: genericTypeParameterList : ^( GENERIC_TYPE_PARAM_LIST ( genericTypeParameter )+ ) ;
    public final void genericTypeParameterList() throws RecognitionException {
        int genericTypeParameterList_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 7) ) { return ; }
            // JavaASTSecondPass.g:223:5: ( ^( GENERIC_TYPE_PARAM_LIST ( genericTypeParameter )+ ) )
            // JavaASTSecondPass.g:223:9: ^( GENERIC_TYPE_PARAM_LIST ( genericTypeParameter )+ )
            {
            match(input,GENERIC_TYPE_PARAM_LIST,FOLLOW_GENERIC_TYPE_PARAM_LIST_in_genericTypeParameterList445); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            // JavaASTSecondPass.g:223:35: ( genericTypeParameter )+
            int cnt15=0;
            loop15:
            do {
                int alt15=2;
                int LA15_0 = input.LA(1);

                if ( (LA15_0==IDENT) ) {
                    alt15=1;
                }


                switch (alt15) {
            	case 1 :
            	    // JavaASTSecondPass.g:0:0: genericTypeParameter
            	    {
            	    pushFollow(FOLLOW_genericTypeParameter_in_genericTypeParameterList447);
            	    genericTypeParameter();
            	    _fsp--;
            	    if (failed) return ;

            	    }
            	    break;

            	default :
            	    if ( cnt15 >= 1 ) break loop15;
            	    if (backtracking>0) {failed=true; return ;}
                        EarlyExitException eee =
                            new EarlyExitException(15, input);
                        throw eee;
                }
                cnt15++;
            } while (true);


            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 7, genericTypeParameterList_StartIndex); }
        }
        return ;
    }
    // $ANTLR end genericTypeParameterList


    // $ANTLR start genericTypeParameter
    // JavaASTSecondPass.g:226:1: genericTypeParameter : ^( IDENT ( bound )? ) ;
    public final void genericTypeParameter() throws RecognitionException {
        int genericTypeParameter_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 8) ) { return ; }
            // JavaASTSecondPass.g:227:5: ( ^( IDENT ( bound )? ) )
            // JavaASTSecondPass.g:227:9: ^( IDENT ( bound )? )
            {
            match(input,IDENT,FOLLOW_IDENT_in_genericTypeParameter469); if (failed) return ;

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); if (failed) return ;
                // JavaASTSecondPass.g:227:17: ( bound )?
                int alt16=2;
                int LA16_0 = input.LA(1);

                if ( (LA16_0==EXTENDS_BOUND_LIST) ) {
                    alt16=1;
                }
                switch (alt16) {
                    case 1 :
                        // JavaASTSecondPass.g:0:0: bound
                        {
                        pushFollow(FOLLOW_bound_in_genericTypeParameter471);
                        bound();
                        _fsp--;
                        if (failed) return ;

                        }
                        break;

                }


                match(input, Token.UP, null); if (failed) return ;
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 8, genericTypeParameter_StartIndex); }
        }
        return ;
    }
    // $ANTLR end genericTypeParameter


    // $ANTLR start bound
    // JavaASTSecondPass.g:230:1: bound : ^( EXTENDS_BOUND_LIST ( type )+ ) ;
    public final void bound() throws RecognitionException {
        int bound_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 9) ) { return ; }
            // JavaASTSecondPass.g:231:5: ( ^( EXTENDS_BOUND_LIST ( type )+ ) )
            // JavaASTSecondPass.g:231:9: ^( EXTENDS_BOUND_LIST ( type )+ )
            {
            match(input,EXTENDS_BOUND_LIST,FOLLOW_EXTENDS_BOUND_LIST_in_bound501); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            // JavaASTSecondPass.g:231:30: ( type )+
            int cnt17=0;
            loop17:
            do {
                int alt17=2;
                int LA17_0 = input.LA(1);

                if ( (LA17_0==TYPE) ) {
                    alt17=1;
                }


                switch (alt17) {
            	case 1 :
            	    // JavaASTSecondPass.g:0:0: type
            	    {
            	    pushFollow(FOLLOW_type_in_bound503);
            	    type();
            	    _fsp--;
            	    if (failed) return ;

            	    }
            	    break;

            	default :
            	    if ( cnt17 >= 1 ) break loop17;
            	    if (backtracking>0) {failed=true; return ;}
                        EarlyExitException eee =
                            new EarlyExitException(17, input);
                        throw eee;
                }
                cnt17++;
            } while (true);


            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 9, bound_StartIndex); }
        }
        return ;
    }
    // $ANTLR end bound


    // $ANTLR start enumTopLevelScope
    // JavaASTSecondPass.g:234:1: enumTopLevelScope : ^( ENUM_TOP_LEVEL_SCOPE ( enumConstant )+ ( classTopLevelScope )? ) ;
    public final void enumTopLevelScope() throws RecognitionException {
        int enumTopLevelScope_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 10) ) { return ; }
            // JavaASTSecondPass.g:235:5: ( ^( ENUM_TOP_LEVEL_SCOPE ( enumConstant )+ ( classTopLevelScope )? ) )
            // JavaASTSecondPass.g:235:9: ^( ENUM_TOP_LEVEL_SCOPE ( enumConstant )+ ( classTopLevelScope )? )
            {
            match(input,ENUM_TOP_LEVEL_SCOPE,FOLLOW_ENUM_TOP_LEVEL_SCOPE_in_enumTopLevelScope525); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            // JavaASTSecondPass.g:235:32: ( enumConstant )+
            int cnt18=0;
            loop18:
            do {
                int alt18=2;
                int LA18_0 = input.LA(1);

                if ( (LA18_0==IDENT) ) {
                    alt18=1;
                }


                switch (alt18) {
            	case 1 :
            	    // JavaASTSecondPass.g:0:0: enumConstant
            	    {
            	    pushFollow(FOLLOW_enumConstant_in_enumTopLevelScope527);
            	    enumConstant();
            	    _fsp--;
            	    if (failed) return ;

            	    }
            	    break;

            	default :
            	    if ( cnt18 >= 1 ) break loop18;
            	    if (backtracking>0) {failed=true; return ;}
                        EarlyExitException eee =
                            new EarlyExitException(18, input);
                        throw eee;
                }
                cnt18++;
            } while (true);

            // JavaASTSecondPass.g:235:46: ( classTopLevelScope )?
            int alt19=2;
            int LA19_0 = input.LA(1);

            if ( (LA19_0==CLASS_TOP_LEVEL_SCOPE) ) {
                alt19=1;
            }
            switch (alt19) {
                case 1 :
                    // JavaASTSecondPass.g:0:0: classTopLevelScope
                    {
                    pushFollow(FOLLOW_classTopLevelScope_in_enumTopLevelScope530);
                    classTopLevelScope();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;

            }


            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 10, enumTopLevelScope_StartIndex); }
        }
        return ;
    }
    // $ANTLR end enumTopLevelScope


    // $ANTLR start enumConstant
    // JavaASTSecondPass.g:238:1: enumConstant : ^( IDENT annotationList ( arguments )? ( classTopLevelScope )? ) ;
    public final void enumConstant() throws RecognitionException {
        int enumConstant_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 11) ) { return ; }
            // JavaASTSecondPass.g:239:5: ( ^( IDENT annotationList ( arguments )? ( classTopLevelScope )? ) )
            // JavaASTSecondPass.g:239:9: ^( IDENT annotationList ( arguments )? ( classTopLevelScope )? )
            {
            match(input,IDENT,FOLLOW_IDENT_in_enumConstant556); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            pushFollow(FOLLOW_annotationList_in_enumConstant558);
            annotationList();
            _fsp--;
            if (failed) return ;
            // JavaASTSecondPass.g:239:32: ( arguments )?
            int alt20=2;
            int LA20_0 = input.LA(1);

            if ( (LA20_0==ARGUMENT_LIST) ) {
                alt20=1;
            }
            switch (alt20) {
                case 1 :
                    // JavaASTSecondPass.g:0:0: arguments
                    {
                    pushFollow(FOLLOW_arguments_in_enumConstant560);
                    arguments();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;

            }

            // JavaASTSecondPass.g:239:43: ( classTopLevelScope )?
            int alt21=2;
            int LA21_0 = input.LA(1);

            if ( (LA21_0==CLASS_TOP_LEVEL_SCOPE) ) {
                alt21=1;
            }
            switch (alt21) {
                case 1 :
                    // JavaASTSecondPass.g:0:0: classTopLevelScope
                    {
                    pushFollow(FOLLOW_classTopLevelScope_in_enumConstant563);
                    classTopLevelScope();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;

            }


            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 11, enumConstant_StartIndex); }
        }
        return ;
    }
    // $ANTLR end enumConstant


    // $ANTLR start classTopLevelScope
    // JavaASTSecondPass.g:243:1: classTopLevelScope : ^( CLASS_TOP_LEVEL_SCOPE ( classScopeDeclarations )* ) ;
    public final void classTopLevelScope() throws RecognitionException {
        int classTopLevelScope_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 12) ) { return ; }
            // JavaASTSecondPass.g:244:5: ( ^( CLASS_TOP_LEVEL_SCOPE ( classScopeDeclarations )* ) )
            // JavaASTSecondPass.g:244:9: ^( CLASS_TOP_LEVEL_SCOPE ( classScopeDeclarations )* )
            {
            match(input,CLASS_TOP_LEVEL_SCOPE,FOLLOW_CLASS_TOP_LEVEL_SCOPE_in_classTopLevelScope594); if (failed) return ;

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); if (failed) return ;
                // JavaASTSecondPass.g:244:33: ( classScopeDeclarations )*
                loop22:
                do {
                    int alt22=2;
                    int LA22_0 = input.LA(1);

                    if ( (LA22_0==AT||LA22_0==CLASS||LA22_0==ENUM||LA22_0==INTERFACE||(LA22_0>=CLASS_INSTANCE_INITIALIZER && LA22_0<=CLASS_STATIC_INITIALIZER)||LA22_0==CONSTRUCTOR_DECL||LA22_0==FUNCTION_METHOD_DECL||LA22_0==VAR_DECLARATION||LA22_0==VOID_METHOD_DECL) ) {
                        alt22=1;
                    }


                    switch (alt22) {
                	case 1 :
                	    // JavaASTSecondPass.g:0:0: classScopeDeclarations
                	    {
                	    pushFollow(FOLLOW_classScopeDeclarations_in_classTopLevelScope596);
                	    classScopeDeclarations();
                	    _fsp--;
                	    if (failed) return ;

                	    }
                	    break;

                	default :
                	    break loop22;
                    }
                } while (true);


                match(input, Token.UP, null); if (failed) return ;
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 12, classTopLevelScope_StartIndex); }
        }
        return ;
    }
    // $ANTLR end classTopLevelScope


    // $ANTLR start classScopeDeclarations
    // JavaASTSecondPass.g:247:1: classScopeDeclarations : ( ^( CLASS_INSTANCE_INITIALIZER block ) | ^( CLASS_STATIC_INITIALIZER block ) | ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type temp= IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block )? ) | ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? temp= IDENT formalParameterList ( throwsClause )? ( block )? ) | ^( VAR_DECLARATION modifierList temp2= type variableDeclaratorList ) | ^( CONSTRUCTOR_DECL modifierList ( genericTypeParameterList )? formalParameterList ( throwsClause )? block ) | typeDeclaration );
    public final void classScopeDeclarations() throws RecognitionException {
        int classScopeDeclarations_StartIndex = input.index();
        CommonTree temp=null;
        String temp2 = null;


        try {
            if ( backtracking>0 && alreadyParsedRule(input, 13) ) { return ; }
            // JavaASTSecondPass.g:248:5: ( ^( CLASS_INSTANCE_INITIALIZER block ) | ^( CLASS_STATIC_INITIALIZER block ) | ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type temp= IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block )? ) | ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? temp= IDENT formalParameterList ( throwsClause )? ( block )? ) | ^( VAR_DECLARATION modifierList temp2= type variableDeclaratorList ) | ^( CONSTRUCTOR_DECL modifierList ( genericTypeParameterList )? formalParameterList ( throwsClause )? block ) | typeDeclaration )
            int alt32=7;
            switch ( input.LA(1) ) {
            case CLASS_INSTANCE_INITIALIZER:
                {
                alt32=1;
                }
                break;
            case CLASS_STATIC_INITIALIZER:
                {
                alt32=2;
                }
                break;
            case FUNCTION_METHOD_DECL:
                {
                alt32=3;
                }
                break;
            case VOID_METHOD_DECL:
                {
                alt32=4;
                }
                break;
            case VAR_DECLARATION:
                {
                alt32=5;
                }
                break;
            case CONSTRUCTOR_DECL:
                {
                alt32=6;
                }
                break;
            case AT:
            case CLASS:
            case ENUM:
            case INTERFACE:
                {
                alt32=7;
                }
                break;
            default:
                if (backtracking>0) {failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("247:1: classScopeDeclarations : ( ^( CLASS_INSTANCE_INITIALIZER block ) | ^( CLASS_STATIC_INITIALIZER block ) | ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type temp= IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block )? ) | ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? temp= IDENT formalParameterList ( throwsClause )? ( block )? ) | ^( VAR_DECLARATION modifierList temp2= type variableDeclaratorList ) | ^( CONSTRUCTOR_DECL modifierList ( genericTypeParameterList )? formalParameterList ( throwsClause )? block ) | typeDeclaration );", 32, 0, input);

                throw nvae;
            }

            switch (alt32) {
                case 1 :
                    // JavaASTSecondPass.g:248:9: ^( CLASS_INSTANCE_INITIALIZER block )
                    {
                    match(input,CLASS_INSTANCE_INITIALIZER,FOLLOW_CLASS_INSTANCE_INITIALIZER_in_classScopeDeclarations622); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_block_in_classScopeDeclarations624);
                    block();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:249:9: ^( CLASS_STATIC_INITIALIZER block )
                    {
                    match(input,CLASS_STATIC_INITIALIZER,FOLLOW_CLASS_STATIC_INITIALIZER_in_classScopeDeclarations636); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_block_in_classScopeDeclarations638);
                    block();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 3 :
                    // JavaASTSecondPass.g:250:9: ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type temp= IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block )? )
                    {
                    match(input,FUNCTION_METHOD_DECL,FOLLOW_FUNCTION_METHOD_DECL_in_classScopeDeclarations650); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_modifierList_in_classScopeDeclarations652);
                    modifierList();
                    _fsp--;
                    if (failed) return ;
                    // JavaASTSecondPass.g:250:45: ( genericTypeParameterList )?
                    int alt23=2;
                    int LA23_0 = input.LA(1);

                    if ( (LA23_0==GENERIC_TYPE_PARAM_LIST) ) {
                        alt23=1;
                    }
                    switch (alt23) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: genericTypeParameterList
                            {
                            pushFollow(FOLLOW_genericTypeParameterList_in_classScopeDeclarations654);
                            genericTypeParameterList();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    pushFollow(FOLLOW_type_in_classScopeDeclarations657);
                    type();
                    _fsp--;
                    if (failed) return ;
                    temp=(CommonTree)input.LT(1);
                    match(input,IDENT,FOLLOW_IDENT_in_classScopeDeclarations661); if (failed) return ;
                    if ( backtracking==0 ) {
                      
                          		currentMethodName = thisTypeName + "." + temp.getText();
                          		currentParameterTypeList = new ArrayList<String>();
                          	
                    }
                    pushFollow(FOLLOW_formalParameterList_in_classScopeDeclarations677);
                    formalParameterList();
                    _fsp--;
                    if (failed) return ;
                    if ( backtracking==0 ) {
                      
                          		String[] parameterTypes = currentParameterTypeList.toArray( new String[currentParameterTypeList.size()] );
                          		methodResolver.addMethod( currentMethodName, parameterTypes );
                          	
                    }
                    // JavaASTSecondPass.g:260:8: ( arrayDeclaratorList )?
                    int alt24=2;
                    int LA24_0 = input.LA(1);

                    if ( (LA24_0==ARRAY_DECLARATOR_LIST) ) {
                        alt24=1;
                    }
                    switch (alt24) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: arrayDeclaratorList
                            {
                            pushFollow(FOLLOW_arrayDeclaratorList_in_classScopeDeclarations693);
                            arrayDeclaratorList();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    // JavaASTSecondPass.g:260:29: ( throwsClause )?
                    int alt25=2;
                    int LA25_0 = input.LA(1);

                    if ( (LA25_0==THROWS_CLAUSE) ) {
                        alt25=1;
                    }
                    switch (alt25) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: throwsClause
                            {
                            pushFollow(FOLLOW_throwsClause_in_classScopeDeclarations696);
                            throwsClause();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    // JavaASTSecondPass.g:260:43: ( block )?
                    int alt26=2;
                    int LA26_0 = input.LA(1);

                    if ( (LA26_0==BLOCK_SCOPE) ) {
                        alt26=1;
                    }
                    switch (alt26) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: block
                            {
                            pushFollow(FOLLOW_block_in_classScopeDeclarations699);
                            block();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }


                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 4 :
                    // JavaASTSecondPass.g:261:9: ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? temp= IDENT formalParameterList ( throwsClause )? ( block )? )
                    {
                    match(input,VOID_METHOD_DECL,FOLLOW_VOID_METHOD_DECL_in_classScopeDeclarations712); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_modifierList_in_classScopeDeclarations714);
                    modifierList();
                    _fsp--;
                    if (failed) return ;
                    // JavaASTSecondPass.g:261:41: ( genericTypeParameterList )?
                    int alt27=2;
                    int LA27_0 = input.LA(1);

                    if ( (LA27_0==GENERIC_TYPE_PARAM_LIST) ) {
                        alt27=1;
                    }
                    switch (alt27) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: genericTypeParameterList
                            {
                            pushFollow(FOLLOW_genericTypeParameterList_in_classScopeDeclarations716);
                            genericTypeParameterList();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    temp=(CommonTree)input.LT(1);
                    match(input,IDENT,FOLLOW_IDENT_in_classScopeDeclarations721); if (failed) return ;
                    if ( backtracking==0 ) {
                      
                          		currentMethodName = thisTypeName + "." + temp.getText();
                          		currentParameterTypeList = new ArrayList<String>();
                          	
                    }
                    pushFollow(FOLLOW_formalParameterList_in_classScopeDeclarations736);
                    formalParameterList();
                    _fsp--;
                    if (failed) return ;
                    if ( backtracking==0 ) {
                      
                          		String[] parameterTypes = currentParameterTypeList.toArray( new String[currentParameterTypeList.size()] );
                          		methodResolver.addMethod( currentMethodName, parameterTypes );
                          	 
                    }
                    // JavaASTSecondPass.g:271:7: ( throwsClause )?
                    int alt28=2;
                    int LA28_0 = input.LA(1);

                    if ( (LA28_0==THROWS_CLAUSE) ) {
                        alt28=1;
                    }
                    switch (alt28) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: throwsClause
                            {
                            pushFollow(FOLLOW_throwsClause_in_classScopeDeclarations752);
                            throwsClause();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    // JavaASTSecondPass.g:271:21: ( block )?
                    int alt29=2;
                    int LA29_0 = input.LA(1);

                    if ( (LA29_0==BLOCK_SCOPE) ) {
                        alt29=1;
                    }
                    switch (alt29) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: block
                            {
                            pushFollow(FOLLOW_block_in_classScopeDeclarations755);
                            block();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }


                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 5 :
                    // JavaASTSecondPass.g:272:9: ^( VAR_DECLARATION modifierList temp2= type variableDeclaratorList )
                    {
                    match(input,VAR_DECLARATION,FOLLOW_VAR_DECLARATION_in_classScopeDeclarations768); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_modifierList_in_classScopeDeclarations770);
                    modifierList();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_type_in_classScopeDeclarations774);
                    temp2=type();
                    _fsp--;
                    if (failed) return ;
                    if ( backtracking==0 ) {
                      
                          		String[] qualifiedTypeName = typeNameQualifier.getQualifiedTypeName( temp2 );	
                          		if( qualifiedTypeName != null )currentVarType = qualifiedTypeName[0];
                          	
                    }
                    pushFollow(FOLLOW_variableDeclaratorList_in_classScopeDeclarations788);
                    variableDeclaratorList();
                    _fsp--;
                    if (failed) return ;
                    if ( backtracking==0 ) {
                      
                          		currentVarType = null;
                          	
                    }

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 6 :
                    // JavaASTSecondPass.g:282:9: ^( CONSTRUCTOR_DECL modifierList ( genericTypeParameterList )? formalParameterList ( throwsClause )? block )
                    {
                    match(input,CONSTRUCTOR_DECL,FOLLOW_CONSTRUCTOR_DECL_in_classScopeDeclarations813); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_modifierList_in_classScopeDeclarations815);
                    modifierList();
                    _fsp--;
                    if (failed) return ;
                    // JavaASTSecondPass.g:282:41: ( genericTypeParameterList )?
                    int alt30=2;
                    int LA30_0 = input.LA(1);

                    if ( (LA30_0==GENERIC_TYPE_PARAM_LIST) ) {
                        alt30=1;
                    }
                    switch (alt30) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: genericTypeParameterList
                            {
                            pushFollow(FOLLOW_genericTypeParameterList_in_classScopeDeclarations817);
                            genericTypeParameterList();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    pushFollow(FOLLOW_formalParameterList_in_classScopeDeclarations820);
                    formalParameterList();
                    _fsp--;
                    if (failed) return ;
                    // JavaASTSecondPass.g:282:87: ( throwsClause )?
                    int alt31=2;
                    int LA31_0 = input.LA(1);

                    if ( (LA31_0==THROWS_CLAUSE) ) {
                        alt31=1;
                    }
                    switch (alt31) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: throwsClause
                            {
                            pushFollow(FOLLOW_throwsClause_in_classScopeDeclarations822);
                            throwsClause();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    pushFollow(FOLLOW_block_in_classScopeDeclarations825);
                    block();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 7 :
                    // JavaASTSecondPass.g:283:9: typeDeclaration
                    {
                    pushFollow(FOLLOW_typeDeclaration_in_classScopeDeclarations836);
                    typeDeclaration();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 13, classScopeDeclarations_StartIndex); }
        }
        return ;
    }
    // $ANTLR end classScopeDeclarations


    // $ANTLR start interfaceTopLevelScope
    // JavaASTSecondPass.g:286:1: interfaceTopLevelScope : ^( INTERFACE_TOP_LEVEL_SCOPE ( interfaceScopeDeclarations )* ) ;
    public final void interfaceTopLevelScope() throws RecognitionException {
        int interfaceTopLevelScope_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 14) ) { return ; }
            // JavaASTSecondPass.g:287:5: ( ^( INTERFACE_TOP_LEVEL_SCOPE ( interfaceScopeDeclarations )* ) )
            // JavaASTSecondPass.g:287:9: ^( INTERFACE_TOP_LEVEL_SCOPE ( interfaceScopeDeclarations )* )
            {
            match(input,INTERFACE_TOP_LEVEL_SCOPE,FOLLOW_INTERFACE_TOP_LEVEL_SCOPE_in_interfaceTopLevelScope860); if (failed) return ;

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); if (failed) return ;
                // JavaASTSecondPass.g:287:37: ( interfaceScopeDeclarations )*
                loop33:
                do {
                    int alt33=2;
                    int LA33_0 = input.LA(1);

                    if ( (LA33_0==AT||LA33_0==CLASS||LA33_0==ENUM||LA33_0==INTERFACE||LA33_0==FUNCTION_METHOD_DECL||LA33_0==VAR_DECLARATION||LA33_0==VOID_METHOD_DECL) ) {
                        alt33=1;
                    }


                    switch (alt33) {
                	case 1 :
                	    // JavaASTSecondPass.g:0:0: interfaceScopeDeclarations
                	    {
                	    pushFollow(FOLLOW_interfaceScopeDeclarations_in_interfaceTopLevelScope862);
                	    interfaceScopeDeclarations();
                	    _fsp--;
                	    if (failed) return ;

                	    }
                	    break;

                	default :
                	    break loop33;
                    }
                } while (true);


                match(input, Token.UP, null); if (failed) return ;
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 14, interfaceTopLevelScope_StartIndex); }
        }
        return ;
    }
    // $ANTLR end interfaceTopLevelScope


    // $ANTLR start interfaceScopeDeclarations
    // JavaASTSecondPass.g:290:1: interfaceScopeDeclarations : ( ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ) | ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ) | ^( VAR_DECLARATION modifierList type variableDeclaratorList ) | typeDeclaration );
    public final void interfaceScopeDeclarations() throws RecognitionException {
        int interfaceScopeDeclarations_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 15) ) { return ; }
            // JavaASTSecondPass.g:291:5: ( ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ) | ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ) | ^( VAR_DECLARATION modifierList type variableDeclaratorList ) | typeDeclaration )
            int alt39=4;
            switch ( input.LA(1) ) {
            case FUNCTION_METHOD_DECL:
                {
                alt39=1;
                }
                break;
            case VOID_METHOD_DECL:
                {
                alt39=2;
                }
                break;
            case VAR_DECLARATION:
                {
                alt39=3;
                }
                break;
            case AT:
            case CLASS:
            case ENUM:
            case INTERFACE:
                {
                alt39=4;
                }
                break;
            default:
                if (backtracking>0) {failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("290:1: interfaceScopeDeclarations : ( ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ) | ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ) | ^( VAR_DECLARATION modifierList type variableDeclaratorList ) | typeDeclaration );", 39, 0, input);

                throw nvae;
            }

            switch (alt39) {
                case 1 :
                    // JavaASTSecondPass.g:291:9: ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? )
                    {
                    match(input,FUNCTION_METHOD_DECL,FOLLOW_FUNCTION_METHOD_DECL_in_interfaceScopeDeclarations888); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_modifierList_in_interfaceScopeDeclarations890);
                    modifierList();
                    _fsp--;
                    if (failed) return ;
                    // JavaASTSecondPass.g:291:45: ( genericTypeParameterList )?
                    int alt34=2;
                    int LA34_0 = input.LA(1);

                    if ( (LA34_0==GENERIC_TYPE_PARAM_LIST) ) {
                        alt34=1;
                    }
                    switch (alt34) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: genericTypeParameterList
                            {
                            pushFollow(FOLLOW_genericTypeParameterList_in_interfaceScopeDeclarations892);
                            genericTypeParameterList();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    pushFollow(FOLLOW_type_in_interfaceScopeDeclarations895);
                    type();
                    _fsp--;
                    if (failed) return ;
                    match(input,IDENT,FOLLOW_IDENT_in_interfaceScopeDeclarations897); if (failed) return ;
                    pushFollow(FOLLOW_formalParameterList_in_interfaceScopeDeclarations899);
                    formalParameterList();
                    _fsp--;
                    if (failed) return ;
                    // JavaASTSecondPass.g:291:102: ( arrayDeclaratorList )?
                    int alt35=2;
                    int LA35_0 = input.LA(1);

                    if ( (LA35_0==ARRAY_DECLARATOR_LIST) ) {
                        alt35=1;
                    }
                    switch (alt35) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: arrayDeclaratorList
                            {
                            pushFollow(FOLLOW_arrayDeclaratorList_in_interfaceScopeDeclarations901);
                            arrayDeclaratorList();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    // JavaASTSecondPass.g:291:123: ( throwsClause )?
                    int alt36=2;
                    int LA36_0 = input.LA(1);

                    if ( (LA36_0==THROWS_CLAUSE) ) {
                        alt36=1;
                    }
                    switch (alt36) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: throwsClause
                            {
                            pushFollow(FOLLOW_throwsClause_in_interfaceScopeDeclarations904);
                            throwsClause();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }


                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:292:9: ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? )
                    {
                    match(input,VOID_METHOD_DECL,FOLLOW_VOID_METHOD_DECL_in_interfaceScopeDeclarations917); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_modifierList_in_interfaceScopeDeclarations919);
                    modifierList();
                    _fsp--;
                    if (failed) return ;
                    // JavaASTSecondPass.g:292:41: ( genericTypeParameterList )?
                    int alt37=2;
                    int LA37_0 = input.LA(1);

                    if ( (LA37_0==GENERIC_TYPE_PARAM_LIST) ) {
                        alt37=1;
                    }
                    switch (alt37) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: genericTypeParameterList
                            {
                            pushFollow(FOLLOW_genericTypeParameterList_in_interfaceScopeDeclarations921);
                            genericTypeParameterList();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    match(input,IDENT,FOLLOW_IDENT_in_interfaceScopeDeclarations924); if (failed) return ;
                    pushFollow(FOLLOW_formalParameterList_in_interfaceScopeDeclarations926);
                    formalParameterList();
                    _fsp--;
                    if (failed) return ;
                    // JavaASTSecondPass.g:292:93: ( throwsClause )?
                    int alt38=2;
                    int LA38_0 = input.LA(1);

                    if ( (LA38_0==THROWS_CLAUSE) ) {
                        alt38=1;
                    }
                    switch (alt38) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: throwsClause
                            {
                            pushFollow(FOLLOW_throwsClause_in_interfaceScopeDeclarations928);
                            throwsClause();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }


                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 3 :
                    // JavaASTSecondPass.g:296:9: ^( VAR_DECLARATION modifierList type variableDeclaratorList )
                    {
                    match(input,VAR_DECLARATION,FOLLOW_VAR_DECLARATION_in_interfaceScopeDeclarations1019); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_modifierList_in_interfaceScopeDeclarations1021);
                    modifierList();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_type_in_interfaceScopeDeclarations1023);
                    type();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_variableDeclaratorList_in_interfaceScopeDeclarations1025);
                    variableDeclaratorList();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 4 :
                    // JavaASTSecondPass.g:297:9: typeDeclaration
                    {
                    pushFollow(FOLLOW_typeDeclaration_in_interfaceScopeDeclarations1036);
                    typeDeclaration();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 15, interfaceScopeDeclarations_StartIndex); }
        }
        return ;
    }
    // $ANTLR end interfaceScopeDeclarations


    // $ANTLR start variableDeclaratorList
    // JavaASTSecondPass.g:300:1: variableDeclaratorList : ^( VAR_DECLARATOR_LIST ( variableDeclarator )+ ) ;
    public final void variableDeclaratorList() throws RecognitionException {
        int variableDeclaratorList_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 16) ) { return ; }
            // JavaASTSecondPass.g:301:5: ( ^( VAR_DECLARATOR_LIST ( variableDeclarator )+ ) )
            // JavaASTSecondPass.g:301:9: ^( VAR_DECLARATOR_LIST ( variableDeclarator )+ )
            {
            match(input,VAR_DECLARATOR_LIST,FOLLOW_VAR_DECLARATOR_LIST_in_variableDeclaratorList1056); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            // JavaASTSecondPass.g:301:31: ( variableDeclarator )+
            int cnt40=0;
            loop40:
            do {
                int alt40=2;
                int LA40_0 = input.LA(1);

                if ( (LA40_0==VAR_DECLARATOR) ) {
                    alt40=1;
                }


                switch (alt40) {
            	case 1 :
            	    // JavaASTSecondPass.g:0:0: variableDeclarator
            	    {
            	    pushFollow(FOLLOW_variableDeclarator_in_variableDeclaratorList1058);
            	    variableDeclarator();
            	    _fsp--;
            	    if (failed) return ;

            	    }
            	    break;

            	default :
            	    if ( cnt40 >= 1 ) break loop40;
            	    if (backtracking>0) {failed=true; return ;}
                        EarlyExitException eee =
                            new EarlyExitException(40, input);
                        throw eee;
                }
                cnt40++;
            } while (true);


            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 16, variableDeclaratorList_StartIndex); }
        }
        return ;
    }
    // $ANTLR end variableDeclaratorList


    // $ANTLR start variableDeclarator
    // JavaASTSecondPass.g:304:1: variableDeclarator : ^( VAR_DECLARATOR temp= variableDeclaratorId ( variableInitializer )? ) ;
    public final void variableDeclarator() throws RecognitionException {
        int variableDeclarator_StartIndex = input.index();
        variableDeclaratorId_return temp = null;


        try {
            if ( backtracking>0 && alreadyParsedRule(input, 17) ) { return ; }
            // JavaASTSecondPass.g:305:5: ( ^( VAR_DECLARATOR temp= variableDeclaratorId ( variableInitializer )? ) )
            // JavaASTSecondPass.g:305:9: ^( VAR_DECLARATOR temp= variableDeclaratorId ( variableInitializer )? )
            {
            match(input,VAR_DECLARATOR,FOLLOW_VAR_DECLARATOR_in_variableDeclarator1080); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            pushFollow(FOLLOW_variableDeclaratorId_in_variableDeclarator1084);
            temp=variableDeclaratorId();
            _fsp--;
            if (failed) return ;
            if ( backtracking==0 ) {
              
                  	if( currentVarType != null ) attributeResolver.addAttribute( input.getTokenStream().toString(
                input.getTreeAdaptor().getTokenStartIndex(temp.start),
                input.getTreeAdaptor().getTokenStopIndex(temp.start)), currentVarType );
                  	
            }
            // JavaASTSecondPass.g:309:6: ( variableInitializer )?
            int alt41=2;
            int LA41_0 = input.LA(1);

            if ( (LA41_0==ARRAY_INITIALIZER||LA41_0==EXPR) ) {
                alt41=1;
            }
            switch (alt41) {
                case 1 :
                    // JavaASTSecondPass.g:0:0: variableInitializer
                    {
                    pushFollow(FOLLOW_variableInitializer_in_variableDeclarator1099);
                    variableInitializer();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;

            }


            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 17, variableDeclarator_StartIndex); }
        }
        return ;
    }
    // $ANTLR end variableDeclarator

    public static class variableDeclaratorId_return extends TreeRuleReturnScope {
    };

    // $ANTLR start variableDeclaratorId
    // JavaASTSecondPass.g:312:1: variableDeclaratorId : ^( IDENT ( arrayDeclaratorList )? ) ;
    public final variableDeclaratorId_return variableDeclaratorId() throws RecognitionException {
        variableDeclaratorId_return retval = new variableDeclaratorId_return();
        retval.start = input.LT(1);
        int variableDeclaratorId_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 18) ) { return retval; }
            // JavaASTSecondPass.g:313:5: ( ^( IDENT ( arrayDeclaratorList )? ) )
            // JavaASTSecondPass.g:313:9: ^( IDENT ( arrayDeclaratorList )? )
            {
            match(input,IDENT,FOLLOW_IDENT_in_variableDeclaratorId1125); if (failed) return retval;

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); if (failed) return retval;
                // JavaASTSecondPass.g:313:17: ( arrayDeclaratorList )?
                int alt42=2;
                int LA42_0 = input.LA(1);

                if ( (LA42_0==ARRAY_DECLARATOR_LIST) ) {
                    alt42=1;
                }
                switch (alt42) {
                    case 1 :
                        // JavaASTSecondPass.g:0:0: arrayDeclaratorList
                        {
                        pushFollow(FOLLOW_arrayDeclaratorList_in_variableDeclaratorId1127);
                        arrayDeclaratorList();
                        _fsp--;
                        if (failed) return retval;

                        }
                        break;

                }


                match(input, Token.UP, null); if (failed) return retval;
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 18, variableDeclaratorId_StartIndex); }
        }
        return retval;
    }
    // $ANTLR end variableDeclaratorId


    // $ANTLR start variableInitializer
    // JavaASTSecondPass.g:316:1: variableInitializer : ( arrayInitializer | expression );
    public final void variableInitializer() throws RecognitionException {
        int variableInitializer_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 19) ) { return ; }
            // JavaASTSecondPass.g:317:5: ( arrayInitializer | expression )
            int alt43=2;
            int LA43_0 = input.LA(1);

            if ( (LA43_0==ARRAY_INITIALIZER) ) {
                alt43=1;
            }
            else if ( (LA43_0==EXPR) ) {
                alt43=2;
            }
            else {
                if (backtracking>0) {failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("316:1: variableInitializer : ( arrayInitializer | expression );", 43, 0, input);

                throw nvae;
            }
            switch (alt43) {
                case 1 :
                    // JavaASTSecondPass.g:317:9: arrayInitializer
                    {
                    pushFollow(FOLLOW_arrayInitializer_in_variableInitializer1148);
                    arrayInitializer();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:318:9: expression
                    {
                    pushFollow(FOLLOW_expression_in_variableInitializer1158);
                    expression();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 19, variableInitializer_StartIndex); }
        }
        return ;
    }
    // $ANTLR end variableInitializer


    // $ANTLR start arrayDeclarator
    // JavaASTSecondPass.g:321:1: arrayDeclarator : LBRACK RBRACK ;
    public final void arrayDeclarator() throws RecognitionException {
        int arrayDeclarator_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 20) ) { return ; }
            // JavaASTSecondPass.g:322:5: ( LBRACK RBRACK )
            // JavaASTSecondPass.g:322:9: LBRACK RBRACK
            {
            match(input,LBRACK,FOLLOW_LBRACK_in_arrayDeclarator1177); if (failed) return ;
            match(input,RBRACK,FOLLOW_RBRACK_in_arrayDeclarator1179); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 20, arrayDeclarator_StartIndex); }
        }
        return ;
    }
    // $ANTLR end arrayDeclarator


    // $ANTLR start arrayDeclaratorList
    // JavaASTSecondPass.g:325:1: arrayDeclaratorList : ^( ARRAY_DECLARATOR_LIST ( ARRAY_DECLARATOR )* ) ;
    public final void arrayDeclaratorList() throws RecognitionException {
        int arrayDeclaratorList_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 21) ) { return ; }
            // JavaASTSecondPass.g:326:5: ( ^( ARRAY_DECLARATOR_LIST ( ARRAY_DECLARATOR )* ) )
            // JavaASTSecondPass.g:326:9: ^( ARRAY_DECLARATOR_LIST ( ARRAY_DECLARATOR )* )
            {
            match(input,ARRAY_DECLARATOR_LIST,FOLLOW_ARRAY_DECLARATOR_LIST_in_arrayDeclaratorList1199); if (failed) return ;

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); if (failed) return ;
                // JavaASTSecondPass.g:326:33: ( ARRAY_DECLARATOR )*
                loop44:
                do {
                    int alt44=2;
                    int LA44_0 = input.LA(1);

                    if ( (LA44_0==ARRAY_DECLARATOR) ) {
                        alt44=1;
                    }


                    switch (alt44) {
                	case 1 :
                	    // JavaASTSecondPass.g:0:0: ARRAY_DECLARATOR
                	    {
                	    match(input,ARRAY_DECLARATOR,FOLLOW_ARRAY_DECLARATOR_in_arrayDeclaratorList1201); if (failed) return ;

                	    }
                	    break;

                	default :
                	    break loop44;
                    }
                } while (true);


                match(input, Token.UP, null); if (failed) return ;
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 21, arrayDeclaratorList_StartIndex); }
        }
        return ;
    }
    // $ANTLR end arrayDeclaratorList


    // $ANTLR start arrayInitializer
    // JavaASTSecondPass.g:329:1: arrayInitializer : ^( ARRAY_INITIALIZER ( variableInitializer )* ) ;
    public final void arrayInitializer() throws RecognitionException {
        int arrayInitializer_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 22) ) { return ; }
            // JavaASTSecondPass.g:330:5: ( ^( ARRAY_INITIALIZER ( variableInitializer )* ) )
            // JavaASTSecondPass.g:330:9: ^( ARRAY_INITIALIZER ( variableInitializer )* )
            {
            match(input,ARRAY_INITIALIZER,FOLLOW_ARRAY_INITIALIZER_in_arrayInitializer1229); if (failed) return ;

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); if (failed) return ;
                // JavaASTSecondPass.g:330:29: ( variableInitializer )*
                loop45:
                do {
                    int alt45=2;
                    int LA45_0 = input.LA(1);

                    if ( (LA45_0==ARRAY_INITIALIZER||LA45_0==EXPR) ) {
                        alt45=1;
                    }


                    switch (alt45) {
                	case 1 :
                	    // JavaASTSecondPass.g:0:0: variableInitializer
                	    {
                	    pushFollow(FOLLOW_variableInitializer_in_arrayInitializer1231);
                	    variableInitializer();
                	    _fsp--;
                	    if (failed) return ;

                	    }
                	    break;

                	default :
                	    break loop45;
                    }
                } while (true);


                match(input, Token.UP, null); if (failed) return ;
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 22, arrayInitializer_StartIndex); }
        }
        return ;
    }
    // $ANTLR end arrayInitializer


    // $ANTLR start throwsClause
    // JavaASTSecondPass.g:333:1: throwsClause : ^( THROWS_CLAUSE ( qualifiedIdentifier )+ ) ;
    public final void throwsClause() throws RecognitionException {
        int throwsClause_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 23) ) { return ; }
            // JavaASTSecondPass.g:334:5: ( ^( THROWS_CLAUSE ( qualifiedIdentifier )+ ) )
            // JavaASTSecondPass.g:334:9: ^( THROWS_CLAUSE ( qualifiedIdentifier )+ )
            {
            match(input,THROWS_CLAUSE,FOLLOW_THROWS_CLAUSE_in_throwsClause1253); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            // JavaASTSecondPass.g:334:25: ( qualifiedIdentifier )+
            int cnt46=0;
            loop46:
            do {
                int alt46=2;
                int LA46_0 = input.LA(1);

                if ( (LA46_0==DOT||LA46_0==IDENT) ) {
                    alt46=1;
                }


                switch (alt46) {
            	case 1 :
            	    // JavaASTSecondPass.g:0:0: qualifiedIdentifier
            	    {
            	    pushFollow(FOLLOW_qualifiedIdentifier_in_throwsClause1255);
            	    qualifiedIdentifier();
            	    _fsp--;
            	    if (failed) return ;

            	    }
            	    break;

            	default :
            	    if ( cnt46 >= 1 ) break loop46;
            	    if (backtracking>0) {failed=true; return ;}
                        EarlyExitException eee =
                            new EarlyExitException(46, input);
                        throw eee;
                }
                cnt46++;
            } while (true);


            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 23, throwsClause_StartIndex); }
        }
        return ;
    }
    // $ANTLR end throwsClause


    // $ANTLR start modifierList
    // JavaASTSecondPass.g:337:1: modifierList : ^( MODIFIER_LIST ( modifier )* ) ;
    public final void modifierList() throws RecognitionException {
        int modifierList_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 24) ) { return ; }
            // JavaASTSecondPass.g:338:5: ( ^( MODIFIER_LIST ( modifier )* ) )
            // JavaASTSecondPass.g:338:9: ^( MODIFIER_LIST ( modifier )* )
            {
            match(input,MODIFIER_LIST,FOLLOW_MODIFIER_LIST_in_modifierList1277); if (failed) return ;

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); if (failed) return ;
                // JavaASTSecondPass.g:338:25: ( modifier )*
                loop47:
                do {
                    int alt47=2;
                    int LA47_0 = input.LA(1);

                    if ( (LA47_0==AT||LA47_0==ABSTRACT||LA47_0==FINAL||LA47_0==NATIVE||(LA47_0>=PRIVATE && LA47_0<=PUBLIC)||(LA47_0>=STATIC && LA47_0<=STRICTFP)||LA47_0==SYNCHRONIZED||LA47_0==TRANSIENT||LA47_0==VOLATILE) ) {
                        alt47=1;
                    }


                    switch (alt47) {
                	case 1 :
                	    // JavaASTSecondPass.g:0:0: modifier
                	    {
                	    pushFollow(FOLLOW_modifier_in_modifierList1279);
                	    modifier();
                	    _fsp--;
                	    if (failed) return ;

                	    }
                	    break;

                	default :
                	    break loop47;
                    }
                } while (true);


                match(input, Token.UP, null); if (failed) return ;
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 24, modifierList_StartIndex); }
        }
        return ;
    }
    // $ANTLR end modifierList


    // $ANTLR start modifier
    // JavaASTSecondPass.g:341:1: modifier : ( PUBLIC | PROTECTED | PRIVATE | STATIC | ABSTRACT | NATIVE | SYNCHRONIZED | TRANSIENT | VOLATILE | STRICTFP | localModifier );
    public final void modifier() throws RecognitionException {
        int modifier_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 25) ) { return ; }
            // JavaASTSecondPass.g:342:5: ( PUBLIC | PROTECTED | PRIVATE | STATIC | ABSTRACT | NATIVE | SYNCHRONIZED | TRANSIENT | VOLATILE | STRICTFP | localModifier )
            int alt48=11;
            switch ( input.LA(1) ) {
            case PUBLIC:
                {
                alt48=1;
                }
                break;
            case PROTECTED:
                {
                alt48=2;
                }
                break;
            case PRIVATE:
                {
                alt48=3;
                }
                break;
            case STATIC:
                {
                alt48=4;
                }
                break;
            case ABSTRACT:
                {
                alt48=5;
                }
                break;
            case NATIVE:
                {
                alt48=6;
                }
                break;
            case SYNCHRONIZED:
                {
                alt48=7;
                }
                break;
            case TRANSIENT:
                {
                alt48=8;
                }
                break;
            case VOLATILE:
                {
                alt48=9;
                }
                break;
            case STRICTFP:
                {
                alt48=10;
                }
                break;
            case AT:
            case FINAL:
                {
                alt48=11;
                }
                break;
            default:
                if (backtracking>0) {failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("341:1: modifier : ( PUBLIC | PROTECTED | PRIVATE | STATIC | ABSTRACT | NATIVE | SYNCHRONIZED | TRANSIENT | VOLATILE | STRICTFP | localModifier );", 48, 0, input);

                throw nvae;
            }

            switch (alt48) {
                case 1 :
                    // JavaASTSecondPass.g:342:9: PUBLIC
                    {
                    match(input,PUBLIC,FOLLOW_PUBLIC_in_modifier1300); if (failed) return ;

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:343:9: PROTECTED
                    {
                    match(input,PROTECTED,FOLLOW_PROTECTED_in_modifier1310); if (failed) return ;

                    }
                    break;
                case 3 :
                    // JavaASTSecondPass.g:344:9: PRIVATE
                    {
                    match(input,PRIVATE,FOLLOW_PRIVATE_in_modifier1320); if (failed) return ;

                    }
                    break;
                case 4 :
                    // JavaASTSecondPass.g:345:9: STATIC
                    {
                    match(input,STATIC,FOLLOW_STATIC_in_modifier1330); if (failed) return ;

                    }
                    break;
                case 5 :
                    // JavaASTSecondPass.g:346:9: ABSTRACT
                    {
                    match(input,ABSTRACT,FOLLOW_ABSTRACT_in_modifier1340); if (failed) return ;

                    }
                    break;
                case 6 :
                    // JavaASTSecondPass.g:347:9: NATIVE
                    {
                    match(input,NATIVE,FOLLOW_NATIVE_in_modifier1350); if (failed) return ;

                    }
                    break;
                case 7 :
                    // JavaASTSecondPass.g:348:9: SYNCHRONIZED
                    {
                    match(input,SYNCHRONIZED,FOLLOW_SYNCHRONIZED_in_modifier1360); if (failed) return ;

                    }
                    break;
                case 8 :
                    // JavaASTSecondPass.g:349:9: TRANSIENT
                    {
                    match(input,TRANSIENT,FOLLOW_TRANSIENT_in_modifier1370); if (failed) return ;

                    }
                    break;
                case 9 :
                    // JavaASTSecondPass.g:350:9: VOLATILE
                    {
                    match(input,VOLATILE,FOLLOW_VOLATILE_in_modifier1380); if (failed) return ;

                    }
                    break;
                case 10 :
                    // JavaASTSecondPass.g:351:9: STRICTFP
                    {
                    match(input,STRICTFP,FOLLOW_STRICTFP_in_modifier1390); if (failed) return ;

                    }
                    break;
                case 11 :
                    // JavaASTSecondPass.g:352:9: localModifier
                    {
                    pushFollow(FOLLOW_localModifier_in_modifier1400);
                    localModifier();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 25, modifier_StartIndex); }
        }
        return ;
    }
    // $ANTLR end modifier


    // $ANTLR start localModifierList
    // JavaASTSecondPass.g:355:1: localModifierList : ^( LOCAL_MODIFIER_LIST ( localModifier )* ) ;
    public final void localModifierList() throws RecognitionException {
        int localModifierList_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 26) ) { return ; }
            // JavaASTSecondPass.g:356:5: ( ^( LOCAL_MODIFIER_LIST ( localModifier )* ) )
            // JavaASTSecondPass.g:356:9: ^( LOCAL_MODIFIER_LIST ( localModifier )* )
            {
            match(input,LOCAL_MODIFIER_LIST,FOLLOW_LOCAL_MODIFIER_LIST_in_localModifierList1420); if (failed) return ;

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); if (failed) return ;
                // JavaASTSecondPass.g:356:31: ( localModifier )*
                loop49:
                do {
                    int alt49=2;
                    int LA49_0 = input.LA(1);

                    if ( (LA49_0==AT||LA49_0==FINAL) ) {
                        alt49=1;
                    }


                    switch (alt49) {
                	case 1 :
                	    // JavaASTSecondPass.g:0:0: localModifier
                	    {
                	    pushFollow(FOLLOW_localModifier_in_localModifierList1422);
                	    localModifier();
                	    _fsp--;
                	    if (failed) return ;

                	    }
                	    break;

                	default :
                	    break loop49;
                    }
                } while (true);


                match(input, Token.UP, null); if (failed) return ;
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 26, localModifierList_StartIndex); }
        }
        return ;
    }
    // $ANTLR end localModifierList


    // $ANTLR start localModifier
    // JavaASTSecondPass.g:359:1: localModifier : ( FINAL | annotation );
    public final void localModifier() throws RecognitionException {
        int localModifier_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 27) ) { return ; }
            // JavaASTSecondPass.g:360:5: ( FINAL | annotation )
            int alt50=2;
            int LA50_0 = input.LA(1);

            if ( (LA50_0==FINAL) ) {
                alt50=1;
            }
            else if ( (LA50_0==AT) ) {
                alt50=2;
            }
            else {
                if (backtracking>0) {failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("359:1: localModifier : ( FINAL | annotation );", 50, 0, input);

                throw nvae;
            }
            switch (alt50) {
                case 1 :
                    // JavaASTSecondPass.g:360:9: FINAL
                    {
                    match(input,FINAL,FOLLOW_FINAL_in_localModifier1443); if (failed) return ;

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:361:9: annotation
                    {
                    pushFollow(FOLLOW_annotation_in_localModifier1453);
                    annotation();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 27, localModifier_StartIndex); }
        }
        return ;
    }
    // $ANTLR end localModifier


    // $ANTLR start type
    // JavaASTSecondPass.g:364:1: type returns [String value] : ^( TYPE ( (temp1= primitiveType ) | (temp2= qualifiedTypeIdent ) ) ( arrayDeclaratorList )? ) ;
    public final String type() throws RecognitionException {
        String value = null;
        int type_StartIndex = input.index();
        String temp1 = null;

        qualifiedTypeIdent_return temp2 = null;


        try {
            if ( backtracking>0 && alreadyParsedRule(input, 28) ) { return value; }
            // JavaASTSecondPass.g:365:5: ( ^( TYPE ( (temp1= primitiveType ) | (temp2= qualifiedTypeIdent ) ) ( arrayDeclaratorList )? ) )
            // JavaASTSecondPass.g:365:9: ^( TYPE ( (temp1= primitiveType ) | (temp2= qualifiedTypeIdent ) ) ( arrayDeclaratorList )? )
            {
            match(input,TYPE,FOLLOW_TYPE_in_type1477); if (failed) return value;

            match(input, Token.DOWN, null); if (failed) return value;
            // JavaASTSecondPass.g:365:16: ( (temp1= primitiveType ) | (temp2= qualifiedTypeIdent ) )
            int alt51=2;
            int LA51_0 = input.LA(1);

            if ( (LA51_0==BOOLEAN||LA51_0==BYTE||LA51_0==CHAR||LA51_0==DOUBLE||LA51_0==FLOAT||(LA51_0>=INT && LA51_0<=LONG)||LA51_0==SHORT) ) {
                alt51=1;
            }
            else if ( (LA51_0==QUALIFIED_TYPE_IDENT) ) {
                alt51=2;
            }
            else {
                if (backtracking>0) {failed=true; return value;}
                NoViableAltException nvae =
                    new NoViableAltException("365:16: ( (temp1= primitiveType ) | (temp2= qualifiedTypeIdent ) )", 51, 0, input);

                throw nvae;
            }
            switch (alt51) {
                case 1 :
                    // JavaASTSecondPass.g:365:18: (temp1= primitiveType )
                    {
                    // JavaASTSecondPass.g:365:18: (temp1= primitiveType )
                    // JavaASTSecondPass.g:365:20: temp1= primitiveType
                    {
                    pushFollow(FOLLOW_primitiveType_in_type1487);
                    temp1=primitiveType();
                    _fsp--;
                    if (failed) return value;
                    if ( backtracking==0 ) {
                       value = temp1; 
                    }

                    }


                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:365:65: (temp2= qualifiedTypeIdent )
                    {
                    // JavaASTSecondPass.g:365:65: (temp2= qualifiedTypeIdent )
                    // JavaASTSecondPass.g:365:67: temp2= qualifiedTypeIdent
                    {
                    pushFollow(FOLLOW_qualifiedTypeIdent_in_type1501);
                    temp2=qualifiedTypeIdent();
                    _fsp--;
                    if (failed) return value;
                    if ( backtracking==0 ) {
                       value = input.getTokenStream().toString(
                        input.getTreeAdaptor().getTokenStartIndex(temp2.start),
                        input.getTreeAdaptor().getTokenStopIndex(temp2.start)); 
                    }

                    }


                    }
                    break;

            }

            // JavaASTSecondPass.g:365:122: ( arrayDeclaratorList )?
            int alt52=2;
            int LA52_0 = input.LA(1);

            if ( (LA52_0==ARRAY_DECLARATOR_LIST) ) {
                alt52=1;
            }
            switch (alt52) {
                case 1 :
                    // JavaASTSecondPass.g:0:0: arrayDeclaratorList
                    {
                    pushFollow(FOLLOW_arrayDeclaratorList_in_type1508);
                    arrayDeclaratorList();
                    _fsp--;
                    if (failed) return value;

                    }
                    break;

            }


            match(input, Token.UP, null); if (failed) return value;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 28, type_StartIndex); }
        }
        return value;
    }
    // $ANTLR end type

    public static class qualifiedTypeIdent_return extends TreeRuleReturnScope {
    };

    // $ANTLR start qualifiedTypeIdent
    // JavaASTSecondPass.g:368:1: qualifiedTypeIdent : ^( QUALIFIED_TYPE_IDENT ( typeIdent )+ ) ;
    public final qualifiedTypeIdent_return qualifiedTypeIdent() throws RecognitionException {
        qualifiedTypeIdent_return retval = new qualifiedTypeIdent_return();
        retval.start = input.LT(1);
        int qualifiedTypeIdent_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 29) ) { return retval; }
            // JavaASTSecondPass.g:369:5: ( ^( QUALIFIED_TYPE_IDENT ( typeIdent )+ ) )
            // JavaASTSecondPass.g:369:9: ^( QUALIFIED_TYPE_IDENT ( typeIdent )+ )
            {
            match(input,QUALIFIED_TYPE_IDENT,FOLLOW_QUALIFIED_TYPE_IDENT_in_qualifiedTypeIdent1530); if (failed) return retval;

            match(input, Token.DOWN, null); if (failed) return retval;
            // JavaASTSecondPass.g:369:32: ( typeIdent )+
            int cnt53=0;
            loop53:
            do {
                int alt53=2;
                int LA53_0 = input.LA(1);

                if ( (LA53_0==IDENT) ) {
                    alt53=1;
                }


                switch (alt53) {
            	case 1 :
            	    // JavaASTSecondPass.g:0:0: typeIdent
            	    {
            	    pushFollow(FOLLOW_typeIdent_in_qualifiedTypeIdent1532);
            	    typeIdent();
            	    _fsp--;
            	    if (failed) return retval;

            	    }
            	    break;

            	default :
            	    if ( cnt53 >= 1 ) break loop53;
            	    if (backtracking>0) {failed=true; return retval;}
                        EarlyExitException eee =
                            new EarlyExitException(53, input);
                        throw eee;
                }
                cnt53++;
            } while (true);


            match(input, Token.UP, null); if (failed) return retval;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 29, qualifiedTypeIdent_StartIndex); }
        }
        return retval;
    }
    // $ANTLR end qualifiedTypeIdent


    // $ANTLR start typeIdent
    // JavaASTSecondPass.g:372:1: typeIdent : ^( IDENT ( genericTypeArgumentList )? ) ;
    public final void typeIdent() throws RecognitionException {
        int typeIdent_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 30) ) { return ; }
            // JavaASTSecondPass.g:373:5: ( ^( IDENT ( genericTypeArgumentList )? ) )
            // JavaASTSecondPass.g:373:9: ^( IDENT ( genericTypeArgumentList )? )
            {
            match(input,IDENT,FOLLOW_IDENT_in_typeIdent1555); if (failed) return ;

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); if (failed) return ;
                // JavaASTSecondPass.g:373:17: ( genericTypeArgumentList )?
                int alt54=2;
                int LA54_0 = input.LA(1);

                if ( (LA54_0==GENERIC_TYPE_ARG_LIST) ) {
                    alt54=1;
                }
                switch (alt54) {
                    case 1 :
                        // JavaASTSecondPass.g:0:0: genericTypeArgumentList
                        {
                        pushFollow(FOLLOW_genericTypeArgumentList_in_typeIdent1557);
                        genericTypeArgumentList();
                        _fsp--;
                        if (failed) return ;

                        }
                        break;

                }


                match(input, Token.UP, null); if (failed) return ;
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 30, typeIdent_StartIndex); }
        }
        return ;
    }
    // $ANTLR end typeIdent


    // $ANTLR start primitiveType
    // JavaASTSecondPass.g:377:1: primitiveType returns [String type] : ( BOOLEAN | CHAR | BYTE | SHORT | INT | LONG | FLOAT | DOUBLE );
    public final String primitiveType() throws RecognitionException {
        String type = null;
        int primitiveType_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 31) ) { return type; }
            // JavaASTSecondPass.g:378:5: ( BOOLEAN | CHAR | BYTE | SHORT | INT | LONG | FLOAT | DOUBLE )
            int alt55=8;
            switch ( input.LA(1) ) {
            case BOOLEAN:
                {
                alt55=1;
                }
                break;
            case CHAR:
                {
                alt55=2;
                }
                break;
            case BYTE:
                {
                alt55=3;
                }
                break;
            case SHORT:
                {
                alt55=4;
                }
                break;
            case INT:
                {
                alt55=5;
                }
                break;
            case LONG:
                {
                alt55=6;
                }
                break;
            case FLOAT:
                {
                alt55=7;
                }
                break;
            case DOUBLE:
                {
                alt55=8;
                }
                break;
            default:
                if (backtracking>0) {failed=true; return type;}
                NoViableAltException nvae =
                    new NoViableAltException("377:1: primitiveType returns [String type] : ( BOOLEAN | CHAR | BYTE | SHORT | INT | LONG | FLOAT | DOUBLE );", 55, 0, input);

                throw nvae;
            }

            switch (alt55) {
                case 1 :
                    // JavaASTSecondPass.g:378:9: BOOLEAN
                    {
                    match(input,BOOLEAN,FOLLOW_BOOLEAN_in_primitiveType1583); if (failed) return type;
                    if ( backtracking==0 ) {
                       type = "java.lang.Boolean"; 
                    }

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:379:9: CHAR
                    {
                    match(input,CHAR,FOLLOW_CHAR_in_primitiveType1596); if (failed) return type;
                    if ( backtracking==0 ) {
                       type = "java.lang.Character"; 
                    }

                    }
                    break;
                case 3 :
                    // JavaASTSecondPass.g:380:9: BYTE
                    {
                    match(input,BYTE,FOLLOW_BYTE_in_primitiveType1609); if (failed) return type;
                    if ( backtracking==0 ) {
                       type = "java.lang.Byte"; 
                    }

                    }
                    break;
                case 4 :
                    // JavaASTSecondPass.g:381:9: SHORT
                    {
                    match(input,SHORT,FOLLOW_SHORT_in_primitiveType1622); if (failed) return type;
                    if ( backtracking==0 ) {
                       type = "java.lang.Short"; 
                    }

                    }
                    break;
                case 5 :
                    // JavaASTSecondPass.g:382:9: INT
                    {
                    match(input,INT,FOLLOW_INT_in_primitiveType1635); if (failed) return type;
                    if ( backtracking==0 ) {
                       type = "java.lang.Integer"; 
                    }

                    }
                    break;
                case 6 :
                    // JavaASTSecondPass.g:383:9: LONG
                    {
                    match(input,LONG,FOLLOW_LONG_in_primitiveType1649); if (failed) return type;
                    if ( backtracking==0 ) {
                       type = "java.lang.Long"; 
                    }

                    }
                    break;
                case 7 :
                    // JavaASTSecondPass.g:384:9: FLOAT
                    {
                    match(input,FLOAT,FOLLOW_FLOAT_in_primitiveType1662); if (failed) return type;
                    if ( backtracking==0 ) {
                       type = "java.lang.Float"; 
                    }

                    }
                    break;
                case 8 :
                    // JavaASTSecondPass.g:385:9: DOUBLE
                    {
                    match(input,DOUBLE,FOLLOW_DOUBLE_in_primitiveType1675); if (failed) return type;
                    if ( backtracking==0 ) {
                       type = "java.lang.Double"; 
                    }

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 31, primitiveType_StartIndex); }
        }
        return type;
    }
    // $ANTLR end primitiveType


    // $ANTLR start genericTypeArgumentList
    // JavaASTSecondPass.g:388:1: genericTypeArgumentList : ^( GENERIC_TYPE_ARG_LIST ( genericTypeArgument )+ ) ;
    public final void genericTypeArgumentList() throws RecognitionException {
        int genericTypeArgumentList_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 32) ) { return ; }
            // JavaASTSecondPass.g:389:5: ( ^( GENERIC_TYPE_ARG_LIST ( genericTypeArgument )+ ) )
            // JavaASTSecondPass.g:389:9: ^( GENERIC_TYPE_ARG_LIST ( genericTypeArgument )+ )
            {
            match(input,GENERIC_TYPE_ARG_LIST,FOLLOW_GENERIC_TYPE_ARG_LIST_in_genericTypeArgumentList1698); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            // JavaASTSecondPass.g:389:33: ( genericTypeArgument )+
            int cnt56=0;
            loop56:
            do {
                int alt56=2;
                int LA56_0 = input.LA(1);

                if ( (LA56_0==QUESTION||LA56_0==TYPE) ) {
                    alt56=1;
                }


                switch (alt56) {
            	case 1 :
            	    // JavaASTSecondPass.g:0:0: genericTypeArgument
            	    {
            	    pushFollow(FOLLOW_genericTypeArgument_in_genericTypeArgumentList1700);
            	    genericTypeArgument();
            	    _fsp--;
            	    if (failed) return ;

            	    }
            	    break;

            	default :
            	    if ( cnt56 >= 1 ) break loop56;
            	    if (backtracking>0) {failed=true; return ;}
                        EarlyExitException eee =
                            new EarlyExitException(56, input);
                        throw eee;
                }
                cnt56++;
            } while (true);


            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 32, genericTypeArgumentList_StartIndex); }
        }
        return ;
    }
    // $ANTLR end genericTypeArgumentList


    // $ANTLR start genericTypeArgument
    // JavaASTSecondPass.g:392:1: genericTypeArgument : ( type | ^( QUESTION ( genericWildcardBoundType )? ) );
    public final void genericTypeArgument() throws RecognitionException {
        int genericTypeArgument_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 33) ) { return ; }
            // JavaASTSecondPass.g:393:5: ( type | ^( QUESTION ( genericWildcardBoundType )? ) )
            int alt58=2;
            int LA58_0 = input.LA(1);

            if ( (LA58_0==TYPE) ) {
                alt58=1;
            }
            else if ( (LA58_0==QUESTION) ) {
                alt58=2;
            }
            else {
                if (backtracking>0) {failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("392:1: genericTypeArgument : ( type | ^( QUESTION ( genericWildcardBoundType )? ) );", 58, 0, input);

                throw nvae;
            }
            switch (alt58) {
                case 1 :
                    // JavaASTSecondPass.g:393:9: type
                    {
                    pushFollow(FOLLOW_type_in_genericTypeArgument1725);
                    type();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:394:9: ^( QUESTION ( genericWildcardBoundType )? )
                    {
                    match(input,QUESTION,FOLLOW_QUESTION_in_genericTypeArgument1736); if (failed) return ;

                    if ( input.LA(1)==Token.DOWN ) {
                        match(input, Token.DOWN, null); if (failed) return ;
                        // JavaASTSecondPass.g:394:20: ( genericWildcardBoundType )?
                        int alt57=2;
                        int LA57_0 = input.LA(1);

                        if ( (LA57_0==EXTENDS||LA57_0==SUPER) ) {
                            alt57=1;
                        }
                        switch (alt57) {
                            case 1 :
                                // JavaASTSecondPass.g:0:0: genericWildcardBoundType
                                {
                                pushFollow(FOLLOW_genericWildcardBoundType_in_genericTypeArgument1738);
                                genericWildcardBoundType();
                                _fsp--;
                                if (failed) return ;

                                }
                                break;

                        }


                        match(input, Token.UP, null); if (failed) return ;
                    }

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 33, genericTypeArgument_StartIndex); }
        }
        return ;
    }
    // $ANTLR end genericTypeArgument


    // $ANTLR start genericWildcardBoundType
    // JavaASTSecondPass.g:397:1: genericWildcardBoundType : ( ^( EXTENDS type ) | ^( SUPER type ) );
    public final void genericWildcardBoundType() throws RecognitionException {
        int genericWildcardBoundType_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 34) ) { return ; }
            // JavaASTSecondPass.g:398:5: ( ^( EXTENDS type ) | ^( SUPER type ) )
            int alt59=2;
            int LA59_0 = input.LA(1);

            if ( (LA59_0==EXTENDS) ) {
                alt59=1;
            }
            else if ( (LA59_0==SUPER) ) {
                alt59=2;
            }
            else {
                if (backtracking>0) {failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("397:1: genericWildcardBoundType : ( ^( EXTENDS type ) | ^( SUPER type ) );", 59, 0, input);

                throw nvae;
            }
            switch (alt59) {
                case 1 :
                    // JavaASTSecondPass.g:398:9: ^( EXTENDS type )
                    {
                    match(input,EXTENDS,FOLLOW_EXTENDS_in_genericWildcardBoundType1878); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_type_in_genericWildcardBoundType1880);
                    type();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:399:9: ^( SUPER type )
                    {
                    match(input,SUPER,FOLLOW_SUPER_in_genericWildcardBoundType1892); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_type_in_genericWildcardBoundType1894);
                    type();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 34, genericWildcardBoundType_StartIndex); }
        }
        return ;
    }
    // $ANTLR end genericWildcardBoundType


    // $ANTLR start formalParameterList
    // JavaASTSecondPass.g:402:1: formalParameterList : ^( FORMAL_PARAM_LIST ( formalParameterStandardDecl )* ( formalParameterVarargDecl )? ) ;
    public final void formalParameterList() throws RecognitionException {
        int formalParameterList_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 35) ) { return ; }
            // JavaASTSecondPass.g:403:5: ( ^( FORMAL_PARAM_LIST ( formalParameterStandardDecl )* ( formalParameterVarargDecl )? ) )
            // JavaASTSecondPass.g:403:9: ^( FORMAL_PARAM_LIST ( formalParameterStandardDecl )* ( formalParameterVarargDecl )? )
            {
            match(input,FORMAL_PARAM_LIST,FOLLOW_FORMAL_PARAM_LIST_in_formalParameterList1915); if (failed) return ;

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); if (failed) return ;
                // JavaASTSecondPass.g:403:29: ( formalParameterStandardDecl )*
                loop60:
                do {
                    int alt60=2;
                    int LA60_0 = input.LA(1);

                    if ( (LA60_0==FORMAL_PARAM_STD_DECL) ) {
                        alt60=1;
                    }


                    switch (alt60) {
                	case 1 :
                	    // JavaASTSecondPass.g:0:0: formalParameterStandardDecl
                	    {
                	    pushFollow(FOLLOW_formalParameterStandardDecl_in_formalParameterList1917);
                	    formalParameterStandardDecl();
                	    _fsp--;
                	    if (failed) return ;

                	    }
                	    break;

                	default :
                	    break loop60;
                    }
                } while (true);

                // JavaASTSecondPass.g:403:58: ( formalParameterVarargDecl )?
                int alt61=2;
                int LA61_0 = input.LA(1);

                if ( (LA61_0==FORMAL_PARAM_VARARG_DECL) ) {
                    alt61=1;
                }
                switch (alt61) {
                    case 1 :
                        // JavaASTSecondPass.g:0:0: formalParameterVarargDecl
                        {
                        pushFollow(FOLLOW_formalParameterVarargDecl_in_formalParameterList1920);
                        formalParameterVarargDecl();
                        _fsp--;
                        if (failed) return ;

                        }
                        break;

                }


                match(input, Token.UP, null); if (failed) return ;
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 35, formalParameterList_StartIndex); }
        }
        return ;
    }
    // $ANTLR end formalParameterList


    // $ANTLR start formalParameterStandardDecl
    // JavaASTSecondPass.g:406:1: formalParameterStandardDecl : ^( FORMAL_PARAM_STD_DECL localModifierList temp= type variableDeclaratorId ) ;
    public final void formalParameterStandardDecl() throws RecognitionException {
        int formalParameterStandardDecl_StartIndex = input.index();
        String temp = null;


        try {
            if ( backtracking>0 && alreadyParsedRule(input, 36) ) { return ; }
            // JavaASTSecondPass.g:407:5: ( ^( FORMAL_PARAM_STD_DECL localModifierList temp= type variableDeclaratorId ) )
            // JavaASTSecondPass.g:407:9: ^( FORMAL_PARAM_STD_DECL localModifierList temp= type variableDeclaratorId )
            {
            match(input,FORMAL_PARAM_STD_DECL,FOLLOW_FORMAL_PARAM_STD_DECL_in_formalParameterStandardDecl1947); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            pushFollow(FOLLOW_localModifierList_in_formalParameterStandardDecl1949);
            localModifierList();
            _fsp--;
            if (failed) return ;
            pushFollow(FOLLOW_type_in_formalParameterStandardDecl1953);
            temp=type();
            _fsp--;
            if (failed) return ;
            if ( backtracking==0 ) {
              
                  		String[] qualifiedName = typeNameQualifier.getQualifiedTypeName( temp );
                  		currentParameterTypeList.add( qualifiedName[0] );
                  	
            }
            pushFollow(FOLLOW_variableDeclaratorId_in_formalParameterStandardDecl1968);
            variableDeclaratorId();
            _fsp--;
            if (failed) return ;

            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 36, formalParameterStandardDecl_StartIndex); }
        }
        return ;
    }
    // $ANTLR end formalParameterStandardDecl


    // $ANTLR start formalParameterVarargDecl
    // JavaASTSecondPass.g:415:1: formalParameterVarargDecl : ^( FORMAL_PARAM_VARARG_DECL localModifierList type variableDeclaratorId ) ;
    public final void formalParameterVarargDecl() throws RecognitionException {
        int formalParameterVarargDecl_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 37) ) { return ; }
            // JavaASTSecondPass.g:416:5: ( ^( FORMAL_PARAM_VARARG_DECL localModifierList type variableDeclaratorId ) )
            // JavaASTSecondPass.g:416:9: ^( FORMAL_PARAM_VARARG_DECL localModifierList type variableDeclaratorId )
            {
            match(input,FORMAL_PARAM_VARARG_DECL,FOLLOW_FORMAL_PARAM_VARARG_DECL_in_formalParameterVarargDecl1993); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            pushFollow(FOLLOW_localModifierList_in_formalParameterVarargDecl1995);
            localModifierList();
            _fsp--;
            if (failed) return ;
            pushFollow(FOLLOW_type_in_formalParameterVarargDecl1997);
            type();
            _fsp--;
            if (failed) return ;
            pushFollow(FOLLOW_variableDeclaratorId_in_formalParameterVarargDecl1999);
            variableDeclaratorId();
            _fsp--;
            if (failed) return ;

            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 37, formalParameterVarargDecl_StartIndex); }
        }
        return ;
    }
    // $ANTLR end formalParameterVarargDecl

    public static class qualifiedIdentifier_return extends TreeRuleReturnScope {
    };

    // $ANTLR start qualifiedIdentifier
    // JavaASTSecondPass.g:419:1: qualifiedIdentifier : ( IDENT | ^( DOT qualifiedIdentifier IDENT ) );
    public final qualifiedIdentifier_return qualifiedIdentifier() throws RecognitionException {
        qualifiedIdentifier_return retval = new qualifiedIdentifier_return();
        retval.start = input.LT(1);
        int qualifiedIdentifier_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 38) ) { return retval; }
            // JavaASTSecondPass.g:420:5: ( IDENT | ^( DOT qualifiedIdentifier IDENT ) )
            int alt62=2;
            int LA62_0 = input.LA(1);

            if ( (LA62_0==IDENT) ) {
                alt62=1;
            }
            else if ( (LA62_0==DOT) ) {
                alt62=2;
            }
            else {
                if (backtracking>0) {failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("419:1: qualifiedIdentifier : ( IDENT | ^( DOT qualifiedIdentifier IDENT ) );", 62, 0, input);

                throw nvae;
            }
            switch (alt62) {
                case 1 :
                    // JavaASTSecondPass.g:420:9: IDENT
                    {
                    match(input,IDENT,FOLLOW_IDENT_in_qualifiedIdentifier2023); if (failed) return retval;

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:421:9: ^( DOT qualifiedIdentifier IDENT )
                    {
                    match(input,DOT,FOLLOW_DOT_in_qualifiedIdentifier2034); if (failed) return retval;

                    match(input, Token.DOWN, null); if (failed) return retval;
                    pushFollow(FOLLOW_qualifiedIdentifier_in_qualifiedIdentifier2036);
                    qualifiedIdentifier();
                    _fsp--;
                    if (failed) return retval;
                    match(input,IDENT,FOLLOW_IDENT_in_qualifiedIdentifier2038); if (failed) return retval;

                    match(input, Token.UP, null); if (failed) return retval;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 38, qualifiedIdentifier_StartIndex); }
        }
        return retval;
    }
    // $ANTLR end qualifiedIdentifier


    // $ANTLR start annotationList
    // JavaASTSecondPass.g:426:1: annotationList : ^( ANNOTATION_LIST ( annotation )* ) ;
    public final void annotationList() throws RecognitionException {
        int annotationList_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 39) ) { return ; }
            // JavaASTSecondPass.g:427:5: ( ^( ANNOTATION_LIST ( annotation )* ) )
            // JavaASTSecondPass.g:427:9: ^( ANNOTATION_LIST ( annotation )* )
            {
            match(input,ANNOTATION_LIST,FOLLOW_ANNOTATION_LIST_in_annotationList2065); if (failed) return ;

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); if (failed) return ;
                // JavaASTSecondPass.g:427:27: ( annotation )*
                loop63:
                do {
                    int alt63=2;
                    int LA63_0 = input.LA(1);

                    if ( (LA63_0==AT) ) {
                        alt63=1;
                    }


                    switch (alt63) {
                	case 1 :
                	    // JavaASTSecondPass.g:0:0: annotation
                	    {
                	    pushFollow(FOLLOW_annotation_in_annotationList2067);
                	    annotation();
                	    _fsp--;
                	    if (failed) return ;

                	    }
                	    break;

                	default :
                	    break loop63;
                    }
                } while (true);


                match(input, Token.UP, null); if (failed) return ;
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 39, annotationList_StartIndex); }
        }
        return ;
    }
    // $ANTLR end annotationList


    // $ANTLR start annotation
    // JavaASTSecondPass.g:430:1: annotation : ^( AT qualifiedIdentifier ( annotationInit )? ) ;
    public final void annotation() throws RecognitionException {
        int annotation_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 40) ) { return ; }
            // JavaASTSecondPass.g:431:5: ( ^( AT qualifiedIdentifier ( annotationInit )? ) )
            // JavaASTSecondPass.g:431:9: ^( AT qualifiedIdentifier ( annotationInit )? )
            {
            match(input,AT,FOLLOW_AT_in_annotation2089); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            pushFollow(FOLLOW_qualifiedIdentifier_in_annotation2091);
            qualifiedIdentifier();
            _fsp--;
            if (failed) return ;
            // JavaASTSecondPass.g:431:34: ( annotationInit )?
            int alt64=2;
            int LA64_0 = input.LA(1);

            if ( (LA64_0==ANNOTATION_INIT_BLOCK) ) {
                alt64=1;
            }
            switch (alt64) {
                case 1 :
                    // JavaASTSecondPass.g:0:0: annotationInit
                    {
                    pushFollow(FOLLOW_annotationInit_in_annotation2093);
                    annotationInit();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;

            }


            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 40, annotation_StartIndex); }
        }
        return ;
    }
    // $ANTLR end annotation


    // $ANTLR start annotationInit
    // JavaASTSecondPass.g:434:1: annotationInit : ^( ANNOTATION_INIT_BLOCK annotationInitializers ) ;
    public final void annotationInit() throws RecognitionException {
        int annotationInit_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 41) ) { return ; }
            // JavaASTSecondPass.g:435:5: ( ^( ANNOTATION_INIT_BLOCK annotationInitializers ) )
            // JavaASTSecondPass.g:435:9: ^( ANNOTATION_INIT_BLOCK annotationInitializers )
            {
            match(input,ANNOTATION_INIT_BLOCK,FOLLOW_ANNOTATION_INIT_BLOCK_in_annotationInit2119); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            pushFollow(FOLLOW_annotationInitializers_in_annotationInit2121);
            annotationInitializers();
            _fsp--;
            if (failed) return ;

            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 41, annotationInit_StartIndex); }
        }
        return ;
    }
    // $ANTLR end annotationInit


    // $ANTLR start annotationInitializers
    // JavaASTSecondPass.g:438:1: annotationInitializers : ( ^( ANNOTATION_INIT_KEY_LIST ( annotationInitializer )+ ) | ^( ANNOTATION_INIT_DEFAULT_KEY annotationElementValue ) );
    public final void annotationInitializers() throws RecognitionException {
        int annotationInitializers_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 42) ) { return ; }
            // JavaASTSecondPass.g:439:5: ( ^( ANNOTATION_INIT_KEY_LIST ( annotationInitializer )+ ) | ^( ANNOTATION_INIT_DEFAULT_KEY annotationElementValue ) )
            int alt66=2;
            int LA66_0 = input.LA(1);

            if ( (LA66_0==ANNOTATION_INIT_KEY_LIST) ) {
                alt66=1;
            }
            else if ( (LA66_0==ANNOTATION_INIT_DEFAULT_KEY) ) {
                alt66=2;
            }
            else {
                if (backtracking>0) {failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("438:1: annotationInitializers : ( ^( ANNOTATION_INIT_KEY_LIST ( annotationInitializer )+ ) | ^( ANNOTATION_INIT_DEFAULT_KEY annotationElementValue ) );", 66, 0, input);

                throw nvae;
            }
            switch (alt66) {
                case 1 :
                    // JavaASTSecondPass.g:439:9: ^( ANNOTATION_INIT_KEY_LIST ( annotationInitializer )+ )
                    {
                    match(input,ANNOTATION_INIT_KEY_LIST,FOLLOW_ANNOTATION_INIT_KEY_LIST_in_annotationInitializers2142); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    // JavaASTSecondPass.g:439:36: ( annotationInitializer )+
                    int cnt65=0;
                    loop65:
                    do {
                        int alt65=2;
                        int LA65_0 = input.LA(1);

                        if ( (LA65_0==IDENT) ) {
                            alt65=1;
                        }


                        switch (alt65) {
                    	case 1 :
                    	    // JavaASTSecondPass.g:0:0: annotationInitializer
                    	    {
                    	    pushFollow(FOLLOW_annotationInitializer_in_annotationInitializers2144);
                    	    annotationInitializer();
                    	    _fsp--;
                    	    if (failed) return ;

                    	    }
                    	    break;

                    	default :
                    	    if ( cnt65 >= 1 ) break loop65;
                    	    if (backtracking>0) {failed=true; return ;}
                                EarlyExitException eee =
                                    new EarlyExitException(65, input);
                                throw eee;
                        }
                        cnt65++;
                    } while (true);


                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:440:9: ^( ANNOTATION_INIT_DEFAULT_KEY annotationElementValue )
                    {
                    match(input,ANNOTATION_INIT_DEFAULT_KEY,FOLLOW_ANNOTATION_INIT_DEFAULT_KEY_in_annotationInitializers2157); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_annotationElementValue_in_annotationInitializers2159);
                    annotationElementValue();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 42, annotationInitializers_StartIndex); }
        }
        return ;
    }
    // $ANTLR end annotationInitializers


    // $ANTLR start annotationInitializer
    // JavaASTSecondPass.g:443:1: annotationInitializer : ^( IDENT annotationElementValue ) ;
    public final void annotationInitializer() throws RecognitionException {
        int annotationInitializer_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 43) ) { return ; }
            // JavaASTSecondPass.g:444:5: ( ^( IDENT annotationElementValue ) )
            // JavaASTSecondPass.g:444:9: ^( IDENT annotationElementValue )
            {
            match(input,IDENT,FOLLOW_IDENT_in_annotationInitializer2184); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            pushFollow(FOLLOW_annotationElementValue_in_annotationInitializer2186);
            annotationElementValue();
            _fsp--;
            if (failed) return ;

            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 43, annotationInitializer_StartIndex); }
        }
        return ;
    }
    // $ANTLR end annotationInitializer


    // $ANTLR start annotationElementValue
    // JavaASTSecondPass.g:447:1: annotationElementValue : ( ^( ANNOTATION_INIT_ARRAY_ELEMENT ( annotationElementValue )* ) | annotation | expression );
    public final void annotationElementValue() throws RecognitionException {
        int annotationElementValue_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 44) ) { return ; }
            // JavaASTSecondPass.g:448:5: ( ^( ANNOTATION_INIT_ARRAY_ELEMENT ( annotationElementValue )* ) | annotation | expression )
            int alt68=3;
            switch ( input.LA(1) ) {
            case ANNOTATION_INIT_ARRAY_ELEMENT:
                {
                alt68=1;
                }
                break;
            case AT:
                {
                alt68=2;
                }
                break;
            case EXPR:
                {
                alt68=3;
                }
                break;
            default:
                if (backtracking>0) {failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("447:1: annotationElementValue : ( ^( ANNOTATION_INIT_ARRAY_ELEMENT ( annotationElementValue )* ) | annotation | expression );", 68, 0, input);

                throw nvae;
            }

            switch (alt68) {
                case 1 :
                    // JavaASTSecondPass.g:448:9: ^( ANNOTATION_INIT_ARRAY_ELEMENT ( annotationElementValue )* )
                    {
                    match(input,ANNOTATION_INIT_ARRAY_ELEMENT,FOLLOW_ANNOTATION_INIT_ARRAY_ELEMENT_in_annotationElementValue2211); if (failed) return ;

                    if ( input.LA(1)==Token.DOWN ) {
                        match(input, Token.DOWN, null); if (failed) return ;
                        // JavaASTSecondPass.g:448:41: ( annotationElementValue )*
                        loop67:
                        do {
                            int alt67=2;
                            int LA67_0 = input.LA(1);

                            if ( (LA67_0==AT||LA67_0==ANNOTATION_INIT_ARRAY_ELEMENT||LA67_0==EXPR) ) {
                                alt67=1;
                            }


                            switch (alt67) {
                        	case 1 :
                        	    // JavaASTSecondPass.g:0:0: annotationElementValue
                        	    {
                        	    pushFollow(FOLLOW_annotationElementValue_in_annotationElementValue2213);
                        	    annotationElementValue();
                        	    _fsp--;
                        	    if (failed) return ;

                        	    }
                        	    break;

                        	default :
                        	    break loop67;
                            }
                        } while (true);


                        match(input, Token.UP, null); if (failed) return ;
                    }

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:449:9: annotation
                    {
                    pushFollow(FOLLOW_annotation_in_annotationElementValue2225);
                    annotation();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;
                case 3 :
                    // JavaASTSecondPass.g:450:9: expression
                    {
                    pushFollow(FOLLOW_expression_in_annotationElementValue2235);
                    expression();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 44, annotationElementValue_StartIndex); }
        }
        return ;
    }
    // $ANTLR end annotationElementValue


    // $ANTLR start annotationTopLevelScope
    // JavaASTSecondPass.g:453:1: annotationTopLevelScope : ^( ANNOTATION_TOP_LEVEL_SCOPE ( annotationScopeDeclarations )* ) ;
    public final void annotationTopLevelScope() throws RecognitionException {
        int annotationTopLevelScope_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 45) ) { return ; }
            // JavaASTSecondPass.g:454:5: ( ^( ANNOTATION_TOP_LEVEL_SCOPE ( annotationScopeDeclarations )* ) )
            // JavaASTSecondPass.g:454:9: ^( ANNOTATION_TOP_LEVEL_SCOPE ( annotationScopeDeclarations )* )
            {
            match(input,ANNOTATION_TOP_LEVEL_SCOPE,FOLLOW_ANNOTATION_TOP_LEVEL_SCOPE_in_annotationTopLevelScope2259); if (failed) return ;

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); if (failed) return ;
                // JavaASTSecondPass.g:454:38: ( annotationScopeDeclarations )*
                loop69:
                do {
                    int alt69=2;
                    int LA69_0 = input.LA(1);

                    if ( (LA69_0==AT||LA69_0==CLASS||LA69_0==ENUM||LA69_0==INTERFACE||LA69_0==ANNOTATION_METHOD_DECL||LA69_0==VAR_DECLARATION) ) {
                        alt69=1;
                    }


                    switch (alt69) {
                	case 1 :
                	    // JavaASTSecondPass.g:0:0: annotationScopeDeclarations
                	    {
                	    pushFollow(FOLLOW_annotationScopeDeclarations_in_annotationTopLevelScope2261);
                	    annotationScopeDeclarations();
                	    _fsp--;
                	    if (failed) return ;

                	    }
                	    break;

                	default :
                	    break loop69;
                    }
                } while (true);


                match(input, Token.UP, null); if (failed) return ;
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 45, annotationTopLevelScope_StartIndex); }
        }
        return ;
    }
    // $ANTLR end annotationTopLevelScope


    // $ANTLR start annotationScopeDeclarations
    // JavaASTSecondPass.g:457:1: annotationScopeDeclarations : ( ^( ANNOTATION_METHOD_DECL modifierList type IDENT ( annotationDefaultValue )? ) | ^( VAR_DECLARATION modifierList type variableDeclaratorList ) | typeDeclaration );
    public final void annotationScopeDeclarations() throws RecognitionException {
        int annotationScopeDeclarations_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 46) ) { return ; }
            // JavaASTSecondPass.g:458:5: ( ^( ANNOTATION_METHOD_DECL modifierList type IDENT ( annotationDefaultValue )? ) | ^( VAR_DECLARATION modifierList type variableDeclaratorList ) | typeDeclaration )
            int alt71=3;
            switch ( input.LA(1) ) {
            case ANNOTATION_METHOD_DECL:
                {
                alt71=1;
                }
                break;
            case VAR_DECLARATION:
                {
                alt71=2;
                }
                break;
            case AT:
            case CLASS:
            case ENUM:
            case INTERFACE:
                {
                alt71=3;
                }
                break;
            default:
                if (backtracking>0) {failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("457:1: annotationScopeDeclarations : ( ^( ANNOTATION_METHOD_DECL modifierList type IDENT ( annotationDefaultValue )? ) | ^( VAR_DECLARATION modifierList type variableDeclaratorList ) | typeDeclaration );", 71, 0, input);

                throw nvae;
            }

            switch (alt71) {
                case 1 :
                    // JavaASTSecondPass.g:458:9: ^( ANNOTATION_METHOD_DECL modifierList type IDENT ( annotationDefaultValue )? )
                    {
                    match(input,ANNOTATION_METHOD_DECL,FOLLOW_ANNOTATION_METHOD_DECL_in_annotationScopeDeclarations2287); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_modifierList_in_annotationScopeDeclarations2289);
                    modifierList();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_type_in_annotationScopeDeclarations2291);
                    type();
                    _fsp--;
                    if (failed) return ;
                    match(input,IDENT,FOLLOW_IDENT_in_annotationScopeDeclarations2293); if (failed) return ;
                    // JavaASTSecondPass.g:458:58: ( annotationDefaultValue )?
                    int alt70=2;
                    int LA70_0 = input.LA(1);

                    if ( (LA70_0==DEFAULT) ) {
                        alt70=1;
                    }
                    switch (alt70) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: annotationDefaultValue
                            {
                            pushFollow(FOLLOW_annotationDefaultValue_in_annotationScopeDeclarations2295);
                            annotationDefaultValue();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }


                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:459:9: ^( VAR_DECLARATION modifierList type variableDeclaratorList )
                    {
                    match(input,VAR_DECLARATION,FOLLOW_VAR_DECLARATION_in_annotationScopeDeclarations2308); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_modifierList_in_annotationScopeDeclarations2310);
                    modifierList();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_type_in_annotationScopeDeclarations2312);
                    type();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_variableDeclaratorList_in_annotationScopeDeclarations2314);
                    variableDeclaratorList();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 3 :
                    // JavaASTSecondPass.g:460:9: typeDeclaration
                    {
                    pushFollow(FOLLOW_typeDeclaration_in_annotationScopeDeclarations2325);
                    typeDeclaration();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 46, annotationScopeDeclarations_StartIndex); }
        }
        return ;
    }
    // $ANTLR end annotationScopeDeclarations


    // $ANTLR start annotationDefaultValue
    // JavaASTSecondPass.g:463:1: annotationDefaultValue : ^( DEFAULT annotationElementValue ) ;
    public final void annotationDefaultValue() throws RecognitionException {
        int annotationDefaultValue_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 47) ) { return ; }
            // JavaASTSecondPass.g:464:5: ( ^( DEFAULT annotationElementValue ) )
            // JavaASTSecondPass.g:464:9: ^( DEFAULT annotationElementValue )
            {
            match(input,DEFAULT,FOLLOW_DEFAULT_in_annotationDefaultValue2349); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            pushFollow(FOLLOW_annotationElementValue_in_annotationDefaultValue2351);
            annotationElementValue();
            _fsp--;
            if (failed) return ;

            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 47, annotationDefaultValue_StartIndex); }
        }
        return ;
    }
    // $ANTLR end annotationDefaultValue


    // $ANTLR start block
    // JavaASTSecondPass.g:469:1: block : ^( BLOCK_SCOPE ( blockStatement )* ) ;
    public final void block() throws RecognitionException {
        int block_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 48) ) { return ; }
            // JavaASTSecondPass.g:470:5: ( ^( BLOCK_SCOPE ( blockStatement )* ) )
            // JavaASTSecondPass.g:470:9: ^( BLOCK_SCOPE ( blockStatement )* )
            {
            match(input,BLOCK_SCOPE,FOLLOW_BLOCK_SCOPE_in_block2374); if (failed) return ;

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); if (failed) return ;
                // JavaASTSecondPass.g:470:23: ( blockStatement )*
                loop72:
                do {
                    int alt72=2;
                    int LA72_0 = input.LA(1);

                    if ( (LA72_0==AT||LA72_0==SEMI||LA72_0==ASSERT||LA72_0==BREAK||(LA72_0>=CLASS && LA72_0<=CONTINUE)||LA72_0==DO||LA72_0==ENUM||(LA72_0>=FOR && LA72_0<=IF)||LA72_0==INTERFACE||LA72_0==RETURN||(LA72_0>=SWITCH && LA72_0<=SYNCHRONIZED)||LA72_0==THROW||LA72_0==TRY||LA72_0==WHILE||LA72_0==BLOCK_SCOPE||LA72_0==EXPR||LA72_0==FOR_EACH||LA72_0==LABELED_STATEMENT||LA72_0==VAR_DECLARATION) ) {
                        alt72=1;
                    }


                    switch (alt72) {
                	case 1 :
                	    // JavaASTSecondPass.g:0:0: blockStatement
                	    {
                	    pushFollow(FOLLOW_blockStatement_in_block2376);
                	    blockStatement();
                	    _fsp--;
                	    if (failed) return ;

                	    }
                	    break;

                	default :
                	    break loop72;
                    }
                } while (true);


                match(input, Token.UP, null); if (failed) return ;
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 48, block_StartIndex); }
        }
        return ;
    }
    // $ANTLR end block


    // $ANTLR start blockStatement
    // JavaASTSecondPass.g:473:1: blockStatement : ( localVariableDeclaration | typeDeclaration | statement );
    public final void blockStatement() throws RecognitionException {
        int blockStatement_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 49) ) { return ; }
            // JavaASTSecondPass.g:474:5: ( localVariableDeclaration | typeDeclaration | statement )
            int alt73=3;
            switch ( input.LA(1) ) {
            case VAR_DECLARATION:
                {
                alt73=1;
                }
                break;
            case AT:
            case CLASS:
            case ENUM:
            case INTERFACE:
                {
                alt73=2;
                }
                break;
            case SEMI:
            case ASSERT:
            case BREAK:
            case CONTINUE:
            case DO:
            case FOR:
            case IF:
            case RETURN:
            case SWITCH:
            case SYNCHRONIZED:
            case THROW:
            case TRY:
            case WHILE:
            case BLOCK_SCOPE:
            case EXPR:
            case FOR_EACH:
            case LABELED_STATEMENT:
                {
                alt73=3;
                }
                break;
            default:
                if (backtracking>0) {failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("473:1: blockStatement : ( localVariableDeclaration | typeDeclaration | statement );", 73, 0, input);

                throw nvae;
            }

            switch (alt73) {
                case 1 :
                    // JavaASTSecondPass.g:474:9: localVariableDeclaration
                    {
                    pushFollow(FOLLOW_localVariableDeclaration_in_blockStatement2401);
                    localVariableDeclaration();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:475:9: typeDeclaration
                    {
                    pushFollow(FOLLOW_typeDeclaration_in_blockStatement2411);
                    typeDeclaration();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;
                case 3 :
                    // JavaASTSecondPass.g:476:9: statement
                    {
                    pushFollow(FOLLOW_statement_in_blockStatement2421);
                    statement();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 49, blockStatement_StartIndex); }
        }
        return ;
    }
    // $ANTLR end blockStatement


    // $ANTLR start localVariableDeclaration
    // JavaASTSecondPass.g:479:1: localVariableDeclaration : ^( VAR_DECLARATION localModifierList type variableDeclaratorList ) ;
    public final void localVariableDeclaration() throws RecognitionException {
        int localVariableDeclaration_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 50) ) { return ; }
            // JavaASTSecondPass.g:480:5: ( ^( VAR_DECLARATION localModifierList type variableDeclaratorList ) )
            // JavaASTSecondPass.g:480:9: ^( VAR_DECLARATION localModifierList type variableDeclaratorList )
            {
            match(input,VAR_DECLARATION,FOLLOW_VAR_DECLARATION_in_localVariableDeclaration2445); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            pushFollow(FOLLOW_localModifierList_in_localVariableDeclaration2447);
            localModifierList();
            _fsp--;
            if (failed) return ;
            pushFollow(FOLLOW_type_in_localVariableDeclaration2449);
            type();
            _fsp--;
            if (failed) return ;
            pushFollow(FOLLOW_variableDeclaratorList_in_localVariableDeclaration2451);
            variableDeclaratorList();
            _fsp--;
            if (failed) return ;

            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 50, localVariableDeclaration_StartIndex); }
        }
        return ;
    }
    // $ANTLR end localVariableDeclaration


    // $ANTLR start statement
    // JavaASTSecondPass.g:484:1: statement : ( block | ^( ASSERT expression ( expression )? ) | ^( IF parenthesizedExpression statement ( statement )? ) | ^( FOR forInit forCondition forUpdater statement ) | ^( FOR_EACH localModifierList type IDENT expression statement ) | ^( WHILE parenthesizedExpression statement ) | ^( DO statement parenthesizedExpression ) | ^( TRY block ( catches )? ( block )? ) | ^( SWITCH parenthesizedExpression switchBlockLabels ) | ^( SYNCHRONIZED parenthesizedExpression block ) | ^( RETURN ( expression )? ) | ^( THROW expression ) | ^( BREAK ( IDENT )? ) | ^( CONTINUE ( IDENT )? ) | ^( LABELED_STATEMENT IDENT statement ) | expression | SEMI );
    public final void statement() throws RecognitionException {
        int statement_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 51) ) { return ; }
            // JavaASTSecondPass.g:485:5: ( block | ^( ASSERT expression ( expression )? ) | ^( IF parenthesizedExpression statement ( statement )? ) | ^( FOR forInit forCondition forUpdater statement ) | ^( FOR_EACH localModifierList type IDENT expression statement ) | ^( WHILE parenthesizedExpression statement ) | ^( DO statement parenthesizedExpression ) | ^( TRY block ( catches )? ( block )? ) | ^( SWITCH parenthesizedExpression switchBlockLabels ) | ^( SYNCHRONIZED parenthesizedExpression block ) | ^( RETURN ( expression )? ) | ^( THROW expression ) | ^( BREAK ( IDENT )? ) | ^( CONTINUE ( IDENT )? ) | ^( LABELED_STATEMENT IDENT statement ) | expression | SEMI )
            int alt81=17;
            switch ( input.LA(1) ) {
            case BLOCK_SCOPE:
                {
                alt81=1;
                }
                break;
            case ASSERT:
                {
                alt81=2;
                }
                break;
            case IF:
                {
                alt81=3;
                }
                break;
            case FOR:
                {
                alt81=4;
                }
                break;
            case FOR_EACH:
                {
                alt81=5;
                }
                break;
            case WHILE:
                {
                alt81=6;
                }
                break;
            case DO:
                {
                alt81=7;
                }
                break;
            case TRY:
                {
                alt81=8;
                }
                break;
            case SWITCH:
                {
                alt81=9;
                }
                break;
            case SYNCHRONIZED:
                {
                alt81=10;
                }
                break;
            case RETURN:
                {
                alt81=11;
                }
                break;
            case THROW:
                {
                alt81=12;
                }
                break;
            case BREAK:
                {
                alt81=13;
                }
                break;
            case CONTINUE:
                {
                alt81=14;
                }
                break;
            case LABELED_STATEMENT:
                {
                alt81=15;
                }
                break;
            case EXPR:
                {
                alt81=16;
                }
                break;
            case SEMI:
                {
                alt81=17;
                }
                break;
            default:
                if (backtracking>0) {failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("484:1: statement : ( block | ^( ASSERT expression ( expression )? ) | ^( IF parenthesizedExpression statement ( statement )? ) | ^( FOR forInit forCondition forUpdater statement ) | ^( FOR_EACH localModifierList type IDENT expression statement ) | ^( WHILE parenthesizedExpression statement ) | ^( DO statement parenthesizedExpression ) | ^( TRY block ( catches )? ( block )? ) | ^( SWITCH parenthesizedExpression switchBlockLabels ) | ^( SYNCHRONIZED parenthesizedExpression block ) | ^( RETURN ( expression )? ) | ^( THROW expression ) | ^( BREAK ( IDENT )? ) | ^( CONTINUE ( IDENT )? ) | ^( LABELED_STATEMENT IDENT statement ) | expression | SEMI );", 81, 0, input);

                throw nvae;
            }

            switch (alt81) {
                case 1 :
                    // JavaASTSecondPass.g:485:9: block
                    {
                    pushFollow(FOLLOW_block_in_statement2484);
                    block();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:486:9: ^( ASSERT expression ( expression )? )
                    {
                    match(input,ASSERT,FOLLOW_ASSERT_in_statement2495); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expression_in_statement2497);
                    expression();
                    _fsp--;
                    if (failed) return ;
                    // JavaASTSecondPass.g:486:29: ( expression )?
                    int alt74=2;
                    int LA74_0 = input.LA(1);

                    if ( (LA74_0==EXPR) ) {
                        alt74=1;
                    }
                    switch (alt74) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: expression
                            {
                            pushFollow(FOLLOW_expression_in_statement2499);
                            expression();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }


                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 3 :
                    // JavaASTSecondPass.g:487:9: ^( IF parenthesizedExpression statement ( statement )? )
                    {
                    match(input,IF,FOLLOW_IF_in_statement2512); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_parenthesizedExpression_in_statement2514);
                    parenthesizedExpression();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_statement_in_statement2516);
                    statement();
                    _fsp--;
                    if (failed) return ;
                    // JavaASTSecondPass.g:487:48: ( statement )?
                    int alt75=2;
                    int LA75_0 = input.LA(1);

                    if ( (LA75_0==SEMI||LA75_0==ASSERT||LA75_0==BREAK||LA75_0==CONTINUE||LA75_0==DO||(LA75_0>=FOR && LA75_0<=IF)||LA75_0==RETURN||(LA75_0>=SWITCH && LA75_0<=SYNCHRONIZED)||LA75_0==THROW||LA75_0==TRY||LA75_0==WHILE||LA75_0==BLOCK_SCOPE||LA75_0==EXPR||LA75_0==FOR_EACH||LA75_0==LABELED_STATEMENT) ) {
                        alt75=1;
                    }
                    switch (alt75) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: statement
                            {
                            pushFollow(FOLLOW_statement_in_statement2518);
                            statement();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }


                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 4 :
                    // JavaASTSecondPass.g:488:9: ^( FOR forInit forCondition forUpdater statement )
                    {
                    match(input,FOR,FOLLOW_FOR_in_statement2531); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_forInit_in_statement2533);
                    forInit();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_forCondition_in_statement2535);
                    forCondition();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_forUpdater_in_statement2537);
                    forUpdater();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_statement_in_statement2539);
                    statement();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 5 :
                    // JavaASTSecondPass.g:489:9: ^( FOR_EACH localModifierList type IDENT expression statement )
                    {
                    match(input,FOR_EACH,FOLLOW_FOR_EACH_in_statement2551); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_localModifierList_in_statement2553);
                    localModifierList();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_type_in_statement2555);
                    type();
                    _fsp--;
                    if (failed) return ;
                    match(input,IDENT,FOLLOW_IDENT_in_statement2557); if (failed) return ;
                    pushFollow(FOLLOW_expression_in_statement2559);
                    expression();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_statement_in_statement2561);
                    statement();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 6 :
                    // JavaASTSecondPass.g:490:9: ^( WHILE parenthesizedExpression statement )
                    {
                    match(input,WHILE,FOLLOW_WHILE_in_statement2574); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_parenthesizedExpression_in_statement2576);
                    parenthesizedExpression();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_statement_in_statement2578);
                    statement();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 7 :
                    // JavaASTSecondPass.g:491:9: ^( DO statement parenthesizedExpression )
                    {
                    match(input,DO,FOLLOW_DO_in_statement2590); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_statement_in_statement2592);
                    statement();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_parenthesizedExpression_in_statement2594);
                    parenthesizedExpression();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 8 :
                    // JavaASTSecondPass.g:492:9: ^( TRY block ( catches )? ( block )? )
                    {
                    match(input,TRY,FOLLOW_TRY_in_statement2606); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_block_in_statement2608);
                    block();
                    _fsp--;
                    if (failed) return ;
                    // JavaASTSecondPass.g:492:21: ( catches )?
                    int alt76=2;
                    int LA76_0 = input.LA(1);

                    if ( (LA76_0==CATCH_CLAUSE_LIST) ) {
                        alt76=1;
                    }
                    switch (alt76) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: catches
                            {
                            pushFollow(FOLLOW_catches_in_statement2610);
                            catches();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    // JavaASTSecondPass.g:492:30: ( block )?
                    int alt77=2;
                    int LA77_0 = input.LA(1);

                    if ( (LA77_0==BLOCK_SCOPE) ) {
                        alt77=1;
                    }
                    switch (alt77) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: block
                            {
                            pushFollow(FOLLOW_block_in_statement2613);
                            block();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }


                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 9 :
                    // JavaASTSecondPass.g:493:9: ^( SWITCH parenthesizedExpression switchBlockLabels )
                    {
                    match(input,SWITCH,FOLLOW_SWITCH_in_statement2628); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_parenthesizedExpression_in_statement2630);
                    parenthesizedExpression();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_switchBlockLabels_in_statement2632);
                    switchBlockLabels();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 10 :
                    // JavaASTSecondPass.g:494:9: ^( SYNCHRONIZED parenthesizedExpression block )
                    {
                    match(input,SYNCHRONIZED,FOLLOW_SYNCHRONIZED_in_statement2644); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_parenthesizedExpression_in_statement2646);
                    parenthesizedExpression();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_block_in_statement2648);
                    block();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 11 :
                    // JavaASTSecondPass.g:495:9: ^( RETURN ( expression )? )
                    {
                    match(input,RETURN,FOLLOW_RETURN_in_statement2660); if (failed) return ;

                    if ( input.LA(1)==Token.DOWN ) {
                        match(input, Token.DOWN, null); if (failed) return ;
                        // JavaASTSecondPass.g:495:18: ( expression )?
                        int alt78=2;
                        int LA78_0 = input.LA(1);

                        if ( (LA78_0==EXPR) ) {
                            alt78=1;
                        }
                        switch (alt78) {
                            case 1 :
                                // JavaASTSecondPass.g:0:0: expression
                                {
                                pushFollow(FOLLOW_expression_in_statement2662);
                                expression();
                                _fsp--;
                                if (failed) return ;

                                }
                                break;

                        }


                        match(input, Token.UP, null); if (failed) return ;
                    }

                    }
                    break;
                case 12 :
                    // JavaASTSecondPass.g:496:9: ^( THROW expression )
                    {
                    match(input,THROW,FOLLOW_THROW_in_statement2675); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expression_in_statement2677);
                    expression();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 13 :
                    // JavaASTSecondPass.g:497:9: ^( BREAK ( IDENT )? )
                    {
                    match(input,BREAK,FOLLOW_BREAK_in_statement2689); if (failed) return ;

                    if ( input.LA(1)==Token.DOWN ) {
                        match(input, Token.DOWN, null); if (failed) return ;
                        // JavaASTSecondPass.g:497:17: ( IDENT )?
                        int alt79=2;
                        int LA79_0 = input.LA(1);

                        if ( (LA79_0==IDENT) ) {
                            alt79=1;
                        }
                        switch (alt79) {
                            case 1 :
                                // JavaASTSecondPass.g:0:0: IDENT
                                {
                                match(input,IDENT,FOLLOW_IDENT_in_statement2691); if (failed) return ;

                                }
                                break;

                        }


                        match(input, Token.UP, null); if (failed) return ;
                    }

                    }
                    break;
                case 14 :
                    // JavaASTSecondPass.g:498:9: ^( CONTINUE ( IDENT )? )
                    {
                    match(input,CONTINUE,FOLLOW_CONTINUE_in_statement2704); if (failed) return ;

                    if ( input.LA(1)==Token.DOWN ) {
                        match(input, Token.DOWN, null); if (failed) return ;
                        // JavaASTSecondPass.g:498:20: ( IDENT )?
                        int alt80=2;
                        int LA80_0 = input.LA(1);

                        if ( (LA80_0==IDENT) ) {
                            alt80=1;
                        }
                        switch (alt80) {
                            case 1 :
                                // JavaASTSecondPass.g:0:0: IDENT
                                {
                                match(input,IDENT,FOLLOW_IDENT_in_statement2706); if (failed) return ;

                                }
                                break;

                        }


                        match(input, Token.UP, null); if (failed) return ;
                    }

                    }
                    break;
                case 15 :
                    // JavaASTSecondPass.g:499:9: ^( LABELED_STATEMENT IDENT statement )
                    {
                    match(input,LABELED_STATEMENT,FOLLOW_LABELED_STATEMENT_in_statement2719); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    match(input,IDENT,FOLLOW_IDENT_in_statement2721); if (failed) return ;
                    pushFollow(FOLLOW_statement_in_statement2723);
                    statement();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 16 :
                    // JavaASTSecondPass.g:500:9: expression
                    {
                    pushFollow(FOLLOW_expression_in_statement2734);
                    expression();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;
                case 17 :
                    // JavaASTSecondPass.g:501:9: SEMI
                    {
                    match(input,SEMI,FOLLOW_SEMI_in_statement2744); if (failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 51, statement_StartIndex); }
        }
        return ;
    }
    // $ANTLR end statement


    // $ANTLR start catches
    // JavaASTSecondPass.g:504:1: catches : ^( CATCH_CLAUSE_LIST ( catchClause )+ ) ;
    public final void catches() throws RecognitionException {
        int catches_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 52) ) { return ; }
            // JavaASTSecondPass.g:505:5: ( ^( CATCH_CLAUSE_LIST ( catchClause )+ ) )
            // JavaASTSecondPass.g:505:9: ^( CATCH_CLAUSE_LIST ( catchClause )+ )
            {
            match(input,CATCH_CLAUSE_LIST,FOLLOW_CATCH_CLAUSE_LIST_in_catches2773); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            // JavaASTSecondPass.g:505:29: ( catchClause )+
            int cnt82=0;
            loop82:
            do {
                int alt82=2;
                int LA82_0 = input.LA(1);

                if ( (LA82_0==CATCH) ) {
                    alt82=1;
                }


                switch (alt82) {
            	case 1 :
            	    // JavaASTSecondPass.g:0:0: catchClause
            	    {
            	    pushFollow(FOLLOW_catchClause_in_catches2775);
            	    catchClause();
            	    _fsp--;
            	    if (failed) return ;

            	    }
            	    break;

            	default :
            	    if ( cnt82 >= 1 ) break loop82;
            	    if (backtracking>0) {failed=true; return ;}
                        EarlyExitException eee =
                            new EarlyExitException(82, input);
                        throw eee;
                }
                cnt82++;
            } while (true);


            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 52, catches_StartIndex); }
        }
        return ;
    }
    // $ANTLR end catches


    // $ANTLR start catchClause
    // JavaASTSecondPass.g:508:1: catchClause : ^( CATCH formalParameterStandardDecl block ) ;
    public final void catchClause() throws RecognitionException {
        int catchClause_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 53) ) { return ; }
            // JavaASTSecondPass.g:509:5: ( ^( CATCH formalParameterStandardDecl block ) )
            // JavaASTSecondPass.g:509:9: ^( CATCH formalParameterStandardDecl block )
            {
            match(input,CATCH,FOLLOW_CATCH_in_catchClause2801); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            pushFollow(FOLLOW_formalParameterStandardDecl_in_catchClause2803);
            formalParameterStandardDecl();
            _fsp--;
            if (failed) return ;
            pushFollow(FOLLOW_block_in_catchClause2805);
            block();
            _fsp--;
            if (failed) return ;

            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 53, catchClause_StartIndex); }
        }
        return ;
    }
    // $ANTLR end catchClause


    // $ANTLR start switchBlockLabels
    // JavaASTSecondPass.g:512:1: switchBlockLabels : ^( SWITCH_BLOCK_LABEL_LIST ( switchCaseLabel )* ( switchDefaultLabel )? ( switchCaseLabel )* ) ;
    public final void switchBlockLabels() throws RecognitionException {
        int switchBlockLabels_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 54) ) { return ; }
            // JavaASTSecondPass.g:513:5: ( ^( SWITCH_BLOCK_LABEL_LIST ( switchCaseLabel )* ( switchDefaultLabel )? ( switchCaseLabel )* ) )
            // JavaASTSecondPass.g:513:9: ^( SWITCH_BLOCK_LABEL_LIST ( switchCaseLabel )* ( switchDefaultLabel )? ( switchCaseLabel )* )
            {
            match(input,SWITCH_BLOCK_LABEL_LIST,FOLLOW_SWITCH_BLOCK_LABEL_LIST_in_switchBlockLabels2826); if (failed) return ;

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); if (failed) return ;
                // JavaASTSecondPass.g:513:35: ( switchCaseLabel )*
                loop83:
                do {
                    int alt83=2;
                    int LA83_0 = input.LA(1);

                    if ( (LA83_0==CASE) ) {
                        int LA83_2 = input.LA(2);

                        if ( (synpred125()) ) {
                            alt83=1;
                        }


                    }


                    switch (alt83) {
                	case 1 :
                	    // JavaASTSecondPass.g:0:0: switchCaseLabel
                	    {
                	    pushFollow(FOLLOW_switchCaseLabel_in_switchBlockLabels2828);
                	    switchCaseLabel();
                	    _fsp--;
                	    if (failed) return ;

                	    }
                	    break;

                	default :
                	    break loop83;
                    }
                } while (true);

                // JavaASTSecondPass.g:513:52: ( switchDefaultLabel )?
                int alt84=2;
                int LA84_0 = input.LA(1);

                if ( (LA84_0==DEFAULT) ) {
                    alt84=1;
                }
                switch (alt84) {
                    case 1 :
                        // JavaASTSecondPass.g:0:0: switchDefaultLabel
                        {
                        pushFollow(FOLLOW_switchDefaultLabel_in_switchBlockLabels2831);
                        switchDefaultLabel();
                        _fsp--;
                        if (failed) return ;

                        }
                        break;

                }

                // JavaASTSecondPass.g:513:72: ( switchCaseLabel )*
                loop85:
                do {
                    int alt85=2;
                    int LA85_0 = input.LA(1);

                    if ( (LA85_0==CASE) ) {
                        alt85=1;
                    }


                    switch (alt85) {
                	case 1 :
                	    // JavaASTSecondPass.g:0:0: switchCaseLabel
                	    {
                	    pushFollow(FOLLOW_switchCaseLabel_in_switchBlockLabels2834);
                	    switchCaseLabel();
                	    _fsp--;
                	    if (failed) return ;

                	    }
                	    break;

                	default :
                	    break loop85;
                    }
                } while (true);


                match(input, Token.UP, null); if (failed) return ;
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 54, switchBlockLabels_StartIndex); }
        }
        return ;
    }
    // $ANTLR end switchBlockLabels


    // $ANTLR start switchCaseLabel
    // JavaASTSecondPass.g:516:1: switchCaseLabel : ^( CASE expression ( blockStatement )* ) ;
    public final void switchCaseLabel() throws RecognitionException {
        int switchCaseLabel_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 55) ) { return ; }
            // JavaASTSecondPass.g:517:5: ( ^( CASE expression ( blockStatement )* ) )
            // JavaASTSecondPass.g:517:9: ^( CASE expression ( blockStatement )* )
            {
            match(input,CASE,FOLLOW_CASE_in_switchCaseLabel2864); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            pushFollow(FOLLOW_expression_in_switchCaseLabel2866);
            expression();
            _fsp--;
            if (failed) return ;
            // JavaASTSecondPass.g:517:27: ( blockStatement )*
            loop86:
            do {
                int alt86=2;
                int LA86_0 = input.LA(1);

                if ( (LA86_0==AT||LA86_0==SEMI||LA86_0==ASSERT||LA86_0==BREAK||(LA86_0>=CLASS && LA86_0<=CONTINUE)||LA86_0==DO||LA86_0==ENUM||(LA86_0>=FOR && LA86_0<=IF)||LA86_0==INTERFACE||LA86_0==RETURN||(LA86_0>=SWITCH && LA86_0<=SYNCHRONIZED)||LA86_0==THROW||LA86_0==TRY||LA86_0==WHILE||LA86_0==BLOCK_SCOPE||LA86_0==EXPR||LA86_0==FOR_EACH||LA86_0==LABELED_STATEMENT||LA86_0==VAR_DECLARATION) ) {
                    alt86=1;
                }


                switch (alt86) {
            	case 1 :
            	    // JavaASTSecondPass.g:0:0: blockStatement
            	    {
            	    pushFollow(FOLLOW_blockStatement_in_switchCaseLabel2868);
            	    blockStatement();
            	    _fsp--;
            	    if (failed) return ;

            	    }
            	    break;

            	default :
            	    break loop86;
                }
            } while (true);


            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 55, switchCaseLabel_StartIndex); }
        }
        return ;
    }
    // $ANTLR end switchCaseLabel


    // $ANTLR start switchDefaultLabel
    // JavaASTSecondPass.g:520:1: switchDefaultLabel : ^( DEFAULT ( blockStatement )* ) ;
    public final void switchDefaultLabel() throws RecognitionException {
        int switchDefaultLabel_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 56) ) { return ; }
            // JavaASTSecondPass.g:521:5: ( ^( DEFAULT ( blockStatement )* ) )
            // JavaASTSecondPass.g:521:9: ^( DEFAULT ( blockStatement )* )
            {
            match(input,DEFAULT,FOLLOW_DEFAULT_in_switchDefaultLabel2894); if (failed) return ;

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); if (failed) return ;
                // JavaASTSecondPass.g:521:19: ( blockStatement )*
                loop87:
                do {
                    int alt87=2;
                    int LA87_0 = input.LA(1);

                    if ( (LA87_0==AT||LA87_0==SEMI||LA87_0==ASSERT||LA87_0==BREAK||(LA87_0>=CLASS && LA87_0<=CONTINUE)||LA87_0==DO||LA87_0==ENUM||(LA87_0>=FOR && LA87_0<=IF)||LA87_0==INTERFACE||LA87_0==RETURN||(LA87_0>=SWITCH && LA87_0<=SYNCHRONIZED)||LA87_0==THROW||LA87_0==TRY||LA87_0==WHILE||LA87_0==BLOCK_SCOPE||LA87_0==EXPR||LA87_0==FOR_EACH||LA87_0==LABELED_STATEMENT||LA87_0==VAR_DECLARATION) ) {
                        alt87=1;
                    }


                    switch (alt87) {
                	case 1 :
                	    // JavaASTSecondPass.g:0:0: blockStatement
                	    {
                	    pushFollow(FOLLOW_blockStatement_in_switchDefaultLabel2896);
                	    blockStatement();
                	    _fsp--;
                	    if (failed) return ;

                	    }
                	    break;

                	default :
                	    break loop87;
                    }
                } while (true);


                match(input, Token.UP, null); if (failed) return ;
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 56, switchDefaultLabel_StartIndex); }
        }
        return ;
    }
    // $ANTLR end switchDefaultLabel


    // $ANTLR start forInit
    // JavaASTSecondPass.g:524:1: forInit : ^( FOR_INIT ( localVariableDeclaration | ( expression )* )? ) ;
    public final void forInit() throws RecognitionException {
        int forInit_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 57) ) { return ; }
            // JavaASTSecondPass.g:525:5: ( ^( FOR_INIT ( localVariableDeclaration | ( expression )* )? ) )
            // JavaASTSecondPass.g:525:9: ^( FOR_INIT ( localVariableDeclaration | ( expression )* )? )
            {
            match(input,FOR_INIT,FOLLOW_FOR_INIT_in_forInit2922); if (failed) return ;

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); if (failed) return ;
                // JavaASTSecondPass.g:525:20: ( localVariableDeclaration | ( expression )* )?
                int alt89=3;
                switch ( input.LA(1) ) {
                    case VAR_DECLARATION:
                        {
                        alt89=1;
                        }
                        break;
                    case EXPR:
                        {
                        alt89=2;
                        }
                        break;
                    case UP:
                        {
                        int LA89_3 = input.LA(2);

                        if ( (synpred132()) ) {
                            alt89=2;
                        }
                        }
                        break;
                }

                switch (alt89) {
                    case 1 :
                        // JavaASTSecondPass.g:525:21: localVariableDeclaration
                        {
                        pushFollow(FOLLOW_localVariableDeclaration_in_forInit2925);
                        localVariableDeclaration();
                        _fsp--;
                        if (failed) return ;

                        }
                        break;
                    case 2 :
                        // JavaASTSecondPass.g:525:48: ( expression )*
                        {
                        // JavaASTSecondPass.g:525:48: ( expression )*
                        loop88:
                        do {
                            int alt88=2;
                            int LA88_0 = input.LA(1);

                            if ( (LA88_0==EXPR) ) {
                                alt88=1;
                            }


                            switch (alt88) {
                        	case 1 :
                        	    // JavaASTSecondPass.g:0:0: expression
                        	    {
                        	    pushFollow(FOLLOW_expression_in_forInit2929);
                        	    expression();
                        	    _fsp--;
                        	    if (failed) return ;

                        	    }
                        	    break;

                        	default :
                        	    break loop88;
                            }
                        } while (true);


                        }
                        break;

                }


                match(input, Token.UP, null); if (failed) return ;
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 57, forInit_StartIndex); }
        }
        return ;
    }
    // $ANTLR end forInit


    // $ANTLR start forCondition
    // JavaASTSecondPass.g:528:1: forCondition : ^( FOR_CONDITION ( expression )? ) ;
    public final void forCondition() throws RecognitionException {
        int forCondition_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 58) ) { return ; }
            // JavaASTSecondPass.g:529:5: ( ^( FOR_CONDITION ( expression )? ) )
            // JavaASTSecondPass.g:529:9: ^( FOR_CONDITION ( expression )? )
            {
            match(input,FOR_CONDITION,FOLLOW_FOR_CONDITION_in_forCondition2957); if (failed) return ;

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); if (failed) return ;
                // JavaASTSecondPass.g:529:25: ( expression )?
                int alt90=2;
                int LA90_0 = input.LA(1);

                if ( (LA90_0==EXPR) ) {
                    alt90=1;
                }
                switch (alt90) {
                    case 1 :
                        // JavaASTSecondPass.g:0:0: expression
                        {
                        pushFollow(FOLLOW_expression_in_forCondition2959);
                        expression();
                        _fsp--;
                        if (failed) return ;

                        }
                        break;

                }


                match(input, Token.UP, null); if (failed) return ;
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 58, forCondition_StartIndex); }
        }
        return ;
    }
    // $ANTLR end forCondition


    // $ANTLR start forUpdater
    // JavaASTSecondPass.g:532:1: forUpdater : ^( FOR_UPDATE ( expression )* ) ;
    public final void forUpdater() throws RecognitionException {
        int forUpdater_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 59) ) { return ; }
            // JavaASTSecondPass.g:533:5: ( ^( FOR_UPDATE ( expression )* ) )
            // JavaASTSecondPass.g:533:9: ^( FOR_UPDATE ( expression )* )
            {
            match(input,FOR_UPDATE,FOLLOW_FOR_UPDATE_in_forUpdater2985); if (failed) return ;

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); if (failed) return ;
                // JavaASTSecondPass.g:533:22: ( expression )*
                loop91:
                do {
                    int alt91=2;
                    int LA91_0 = input.LA(1);

                    if ( (LA91_0==EXPR) ) {
                        alt91=1;
                    }


                    switch (alt91) {
                	case 1 :
                	    // JavaASTSecondPass.g:0:0: expression
                	    {
                	    pushFollow(FOLLOW_expression_in_forUpdater2987);
                	    expression();
                	    _fsp--;
                	    if (failed) return ;

                	    }
                	    break;

                	default :
                	    break loop91;
                    }
                } while (true);


                match(input, Token.UP, null); if (failed) return ;
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 59, forUpdater_StartIndex); }
        }
        return ;
    }
    // $ANTLR end forUpdater


    // $ANTLR start parenthesizedExpression
    // JavaASTSecondPass.g:538:1: parenthesizedExpression : ^( PARENTESIZED_EXPR expression ) ;
    public final void parenthesizedExpression() throws RecognitionException {
        int parenthesizedExpression_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 60) ) { return ; }
            // JavaASTSecondPass.g:539:5: ( ^( PARENTESIZED_EXPR expression ) )
            // JavaASTSecondPass.g:539:9: ^( PARENTESIZED_EXPR expression )
            {
            match(input,PARENTESIZED_EXPR,FOLLOW_PARENTESIZED_EXPR_in_parenthesizedExpression3015); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            pushFollow(FOLLOW_expression_in_parenthesizedExpression3017);
            expression();
            _fsp--;
            if (failed) return ;

            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 60, parenthesizedExpression_StartIndex); }
        }
        return ;
    }
    // $ANTLR end parenthesizedExpression


    // $ANTLR start expression
    // JavaASTSecondPass.g:542:1: expression : ^( EXPR expr ) ;
    public final void expression() throws RecognitionException {
        int expression_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 61) ) { return ; }
            // JavaASTSecondPass.g:543:5: ( ^( EXPR expr ) )
            // JavaASTSecondPass.g:543:9: ^( EXPR expr )
            {
            match(input,EXPR,FOLLOW_EXPR_in_expression3042); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            pushFollow(FOLLOW_expr_in_expression3044);
            expr();
            _fsp--;
            if (failed) return ;

            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 61, expression_StartIndex); }
        }
        return ;
    }
    // $ANTLR end expression


    // $ANTLR start expr
    // JavaASTSecondPass.g:546:1: expr : ( ^( ASSIGN expr expr ) | ^( PLUS_ASSIGN expr expr ) | ^( MINUS_ASSIGN expr expr ) | ^( STAR_ASSIGN expr expr ) | ^( DIV_ASSIGN expr expr ) | ^( AND_ASSIGN expr expr ) | ^( OR_ASSIGN expr expr ) | ^( XOR_ASSIGN expr expr ) | ^( MOD_ASSIGN expr expr ) | ^( BIT_SHIFT_RIGHT_ASSIGN expr expr ) | ^( SHIFT_RIGHT_ASSIGN expr expr ) | ^( SHIFT_LEFT_ASSIGN expr expr ) | ^( QUESTION expr expr expr ) | ^( LOGICAL_OR expr expr ) | ^( LOGICAL_AND expr expr ) | ^( OR expr expr ) | ^( XOR expr expr ) | ^( AND expr expr ) | ^( EQUAL expr expr ) | ^( NOT_EQUAL expr expr ) | ^( INSTANCEOF expr type ) | ^( LESS_OR_EQUAL expr expr ) | ^( GREATER_OR_EQUAL expr expr ) | ^( BIT_SHIFT_RIGHT expr expr ) | ^( SHIFT_RIGHT expr expr ) | ^( GREATER_THAN expr expr ) | ^( SHIFT_LEFT expr expr ) | ^( LESS_THAN expr expr ) | ^( PLUS expr expr ) | ^( MINUS expr expr ) | ^( STAR expr expr ) | ^( DIV expr expr ) | ^( MOD expr expr ) | ^( UNARY_PLUS expr ) | ^( UNARY_MINUS expr ) | ^( PRE_INC expr ) | ^( PRE_DEC expr ) | ^( POST_INC expr ) | ^( POST_DEC expr ) | ^( NOT expr ) | ^( LOGICAL_NOT expr ) | ^( CAST_EXPR type expr ) | primaryExpression );
    public final void expr() throws RecognitionException {
        int expr_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 62) ) { return ; }
            // JavaASTSecondPass.g:547:5: ( ^( ASSIGN expr expr ) | ^( PLUS_ASSIGN expr expr ) | ^( MINUS_ASSIGN expr expr ) | ^( STAR_ASSIGN expr expr ) | ^( DIV_ASSIGN expr expr ) | ^( AND_ASSIGN expr expr ) | ^( OR_ASSIGN expr expr ) | ^( XOR_ASSIGN expr expr ) | ^( MOD_ASSIGN expr expr ) | ^( BIT_SHIFT_RIGHT_ASSIGN expr expr ) | ^( SHIFT_RIGHT_ASSIGN expr expr ) | ^( SHIFT_LEFT_ASSIGN expr expr ) | ^( QUESTION expr expr expr ) | ^( LOGICAL_OR expr expr ) | ^( LOGICAL_AND expr expr ) | ^( OR expr expr ) | ^( XOR expr expr ) | ^( AND expr expr ) | ^( EQUAL expr expr ) | ^( NOT_EQUAL expr expr ) | ^( INSTANCEOF expr type ) | ^( LESS_OR_EQUAL expr expr ) | ^( GREATER_OR_EQUAL expr expr ) | ^( BIT_SHIFT_RIGHT expr expr ) | ^( SHIFT_RIGHT expr expr ) | ^( GREATER_THAN expr expr ) | ^( SHIFT_LEFT expr expr ) | ^( LESS_THAN expr expr ) | ^( PLUS expr expr ) | ^( MINUS expr expr ) | ^( STAR expr expr ) | ^( DIV expr expr ) | ^( MOD expr expr ) | ^( UNARY_PLUS expr ) | ^( UNARY_MINUS expr ) | ^( PRE_INC expr ) | ^( PRE_DEC expr ) | ^( POST_INC expr ) | ^( POST_DEC expr ) | ^( NOT expr ) | ^( LOGICAL_NOT expr ) | ^( CAST_EXPR type expr ) | primaryExpression )
            int alt92=43;
            switch ( input.LA(1) ) {
            case ASSIGN:
                {
                alt92=1;
                }
                break;
            case PLUS_ASSIGN:
                {
                alt92=2;
                }
                break;
            case MINUS_ASSIGN:
                {
                alt92=3;
                }
                break;
            case STAR_ASSIGN:
                {
                alt92=4;
                }
                break;
            case DIV_ASSIGN:
                {
                alt92=5;
                }
                break;
            case AND_ASSIGN:
                {
                alt92=6;
                }
                break;
            case OR_ASSIGN:
                {
                alt92=7;
                }
                break;
            case XOR_ASSIGN:
                {
                alt92=8;
                }
                break;
            case MOD_ASSIGN:
                {
                alt92=9;
                }
                break;
            case BIT_SHIFT_RIGHT_ASSIGN:
                {
                alt92=10;
                }
                break;
            case SHIFT_RIGHT_ASSIGN:
                {
                alt92=11;
                }
                break;
            case SHIFT_LEFT_ASSIGN:
                {
                alt92=12;
                }
                break;
            case QUESTION:
                {
                alt92=13;
                }
                break;
            case LOGICAL_OR:
                {
                alt92=14;
                }
                break;
            case LOGICAL_AND:
                {
                alt92=15;
                }
                break;
            case OR:
                {
                alt92=16;
                }
                break;
            case XOR:
                {
                alt92=17;
                }
                break;
            case AND:
                {
                alt92=18;
                }
                break;
            case EQUAL:
                {
                alt92=19;
                }
                break;
            case NOT_EQUAL:
                {
                alt92=20;
                }
                break;
            case INSTANCEOF:
                {
                alt92=21;
                }
                break;
            case LESS_OR_EQUAL:
                {
                alt92=22;
                }
                break;
            case GREATER_OR_EQUAL:
                {
                alt92=23;
                }
                break;
            case BIT_SHIFT_RIGHT:
                {
                alt92=24;
                }
                break;
            case SHIFT_RIGHT:
                {
                alt92=25;
                }
                break;
            case GREATER_THAN:
                {
                alt92=26;
                }
                break;
            case SHIFT_LEFT:
                {
                alt92=27;
                }
                break;
            case LESS_THAN:
                {
                alt92=28;
                }
                break;
            case PLUS:
                {
                alt92=29;
                }
                break;
            case MINUS:
                {
                alt92=30;
                }
                break;
            case STAR:
                {
                alt92=31;
                }
                break;
            case DIV:
                {
                alt92=32;
                }
                break;
            case MOD:
                {
                alt92=33;
                }
                break;
            case UNARY_PLUS:
                {
                alt92=34;
                }
                break;
            case UNARY_MINUS:
                {
                alt92=35;
                }
                break;
            case PRE_INC:
                {
                alt92=36;
                }
                break;
            case PRE_DEC:
                {
                alt92=37;
                }
                break;
            case POST_INC:
                {
                alt92=38;
                }
                break;
            case POST_DEC:
                {
                alt92=39;
                }
                break;
            case NOT:
                {
                alt92=40;
                }
                break;
            case LOGICAL_NOT:
                {
                alt92=41;
                }
                break;
            case CAST_EXPR:
                {
                alt92=42;
                }
                break;
            case DOT:
            case FALSE:
            case NULL:
            case SUPER:
            case THIS:
            case TRUE:
            case ARRAY_DECLARATOR:
            case ARRAY_ELEMENT_ACCESS:
            case CLASS_CONSTRUCTOR_CALL:
            case METHOD_CALL:
            case PARENTESIZED_EXPR:
            case STATIC_ARRAY_CREATOR:
            case SUPER_CONSTRUCTOR_CALL:
            case THIS_CONSTRUCTOR_CALL:
            case IDENT:
            case HEX_LITERAL:
            case OCTAL_LITERAL:
            case DECIMAL_LITERAL:
            case FLOATING_POINT_LITERAL:
            case CHARACTER_LITERAL:
            case STRING_LITERAL:
                {
                alt92=43;
                }
                break;
            default:
                if (backtracking>0) {failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("546:1: expr : ( ^( ASSIGN expr expr ) | ^( PLUS_ASSIGN expr expr ) | ^( MINUS_ASSIGN expr expr ) | ^( STAR_ASSIGN expr expr ) | ^( DIV_ASSIGN expr expr ) | ^( AND_ASSIGN expr expr ) | ^( OR_ASSIGN expr expr ) | ^( XOR_ASSIGN expr expr ) | ^( MOD_ASSIGN expr expr ) | ^( BIT_SHIFT_RIGHT_ASSIGN expr expr ) | ^( SHIFT_RIGHT_ASSIGN expr expr ) | ^( SHIFT_LEFT_ASSIGN expr expr ) | ^( QUESTION expr expr expr ) | ^( LOGICAL_OR expr expr ) | ^( LOGICAL_AND expr expr ) | ^( OR expr expr ) | ^( XOR expr expr ) | ^( AND expr expr ) | ^( EQUAL expr expr ) | ^( NOT_EQUAL expr expr ) | ^( INSTANCEOF expr type ) | ^( LESS_OR_EQUAL expr expr ) | ^( GREATER_OR_EQUAL expr expr ) | ^( BIT_SHIFT_RIGHT expr expr ) | ^( SHIFT_RIGHT expr expr ) | ^( GREATER_THAN expr expr ) | ^( SHIFT_LEFT expr expr ) | ^( LESS_THAN expr expr ) | ^( PLUS expr expr ) | ^( MINUS expr expr ) | ^( STAR expr expr ) | ^( DIV expr expr ) | ^( MOD expr expr ) | ^( UNARY_PLUS expr ) | ^( UNARY_MINUS expr ) | ^( PRE_INC expr ) | ^( PRE_DEC expr ) | ^( POST_INC expr ) | ^( POST_DEC expr ) | ^( NOT expr ) | ^( LOGICAL_NOT expr ) | ^( CAST_EXPR type expr ) | primaryExpression );", 92, 0, input);

                throw nvae;
            }

            switch (alt92) {
                case 1 :
                    // JavaASTSecondPass.g:547:9: ^( ASSIGN expr expr )
                    {
                    match(input,ASSIGN,FOLLOW_ASSIGN_in_expr3065); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3067);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3069);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:548:9: ^( PLUS_ASSIGN expr expr )
                    {
                    match(input,PLUS_ASSIGN,FOLLOW_PLUS_ASSIGN_in_expr3081); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3083);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3085);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 3 :
                    // JavaASTSecondPass.g:549:9: ^( MINUS_ASSIGN expr expr )
                    {
                    match(input,MINUS_ASSIGN,FOLLOW_MINUS_ASSIGN_in_expr3097); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3099);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3101);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 4 :
                    // JavaASTSecondPass.g:550:9: ^( STAR_ASSIGN expr expr )
                    {
                    match(input,STAR_ASSIGN,FOLLOW_STAR_ASSIGN_in_expr3113); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3115);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3117);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 5 :
                    // JavaASTSecondPass.g:551:9: ^( DIV_ASSIGN expr expr )
                    {
                    match(input,DIV_ASSIGN,FOLLOW_DIV_ASSIGN_in_expr3129); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3131);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3133);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 6 :
                    // JavaASTSecondPass.g:552:9: ^( AND_ASSIGN expr expr )
                    {
                    match(input,AND_ASSIGN,FOLLOW_AND_ASSIGN_in_expr3145); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3147);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3149);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 7 :
                    // JavaASTSecondPass.g:553:9: ^( OR_ASSIGN expr expr )
                    {
                    match(input,OR_ASSIGN,FOLLOW_OR_ASSIGN_in_expr3161); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3163);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3165);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 8 :
                    // JavaASTSecondPass.g:554:9: ^( XOR_ASSIGN expr expr )
                    {
                    match(input,XOR_ASSIGN,FOLLOW_XOR_ASSIGN_in_expr3177); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3179);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3181);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 9 :
                    // JavaASTSecondPass.g:555:9: ^( MOD_ASSIGN expr expr )
                    {
                    match(input,MOD_ASSIGN,FOLLOW_MOD_ASSIGN_in_expr3193); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3195);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3197);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 10 :
                    // JavaASTSecondPass.g:556:9: ^( BIT_SHIFT_RIGHT_ASSIGN expr expr )
                    {
                    match(input,BIT_SHIFT_RIGHT_ASSIGN,FOLLOW_BIT_SHIFT_RIGHT_ASSIGN_in_expr3209); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3211);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3213);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 11 :
                    // JavaASTSecondPass.g:557:9: ^( SHIFT_RIGHT_ASSIGN expr expr )
                    {
                    match(input,SHIFT_RIGHT_ASSIGN,FOLLOW_SHIFT_RIGHT_ASSIGN_in_expr3225); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3227);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3229);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 12 :
                    // JavaASTSecondPass.g:558:9: ^( SHIFT_LEFT_ASSIGN expr expr )
                    {
                    match(input,SHIFT_LEFT_ASSIGN,FOLLOW_SHIFT_LEFT_ASSIGN_in_expr3241); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3243);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3245);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 13 :
                    // JavaASTSecondPass.g:559:9: ^( QUESTION expr expr expr )
                    {
                    match(input,QUESTION,FOLLOW_QUESTION_in_expr3257); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3259);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3261);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3263);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 14 :
                    // JavaASTSecondPass.g:560:9: ^( LOGICAL_OR expr expr )
                    {
                    match(input,LOGICAL_OR,FOLLOW_LOGICAL_OR_in_expr3275); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3277);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3279);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 15 :
                    // JavaASTSecondPass.g:561:9: ^( LOGICAL_AND expr expr )
                    {
                    match(input,LOGICAL_AND,FOLLOW_LOGICAL_AND_in_expr3291); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3293);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3295);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 16 :
                    // JavaASTSecondPass.g:562:9: ^( OR expr expr )
                    {
                    match(input,OR,FOLLOW_OR_in_expr3307); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3309);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3311);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 17 :
                    // JavaASTSecondPass.g:563:9: ^( XOR expr expr )
                    {
                    match(input,XOR,FOLLOW_XOR_in_expr3323); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3325);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3327);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 18 :
                    // JavaASTSecondPass.g:564:9: ^( AND expr expr )
                    {
                    match(input,AND,FOLLOW_AND_in_expr3339); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3341);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3343);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 19 :
                    // JavaASTSecondPass.g:565:9: ^( EQUAL expr expr )
                    {
                    match(input,EQUAL,FOLLOW_EQUAL_in_expr3355); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3357);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3359);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 20 :
                    // JavaASTSecondPass.g:566:9: ^( NOT_EQUAL expr expr )
                    {
                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_expr3371); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3373);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3375);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 21 :
                    // JavaASTSecondPass.g:567:9: ^( INSTANCEOF expr type )
                    {
                    match(input,INSTANCEOF,FOLLOW_INSTANCEOF_in_expr3387); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3389);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_type_in_expr3391);
                    type();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 22 :
                    // JavaASTSecondPass.g:568:9: ^( LESS_OR_EQUAL expr expr )
                    {
                    match(input,LESS_OR_EQUAL,FOLLOW_LESS_OR_EQUAL_in_expr3403); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3405);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3407);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 23 :
                    // JavaASTSecondPass.g:569:9: ^( GREATER_OR_EQUAL expr expr )
                    {
                    match(input,GREATER_OR_EQUAL,FOLLOW_GREATER_OR_EQUAL_in_expr3419); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3421);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3423);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 24 :
                    // JavaASTSecondPass.g:570:9: ^( BIT_SHIFT_RIGHT expr expr )
                    {
                    match(input,BIT_SHIFT_RIGHT,FOLLOW_BIT_SHIFT_RIGHT_in_expr3435); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3437);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3439);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 25 :
                    // JavaASTSecondPass.g:571:9: ^( SHIFT_RIGHT expr expr )
                    {
                    match(input,SHIFT_RIGHT,FOLLOW_SHIFT_RIGHT_in_expr3451); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3453);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3455);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 26 :
                    // JavaASTSecondPass.g:572:9: ^( GREATER_THAN expr expr )
                    {
                    match(input,GREATER_THAN,FOLLOW_GREATER_THAN_in_expr3467); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3469);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3471);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 27 :
                    // JavaASTSecondPass.g:573:9: ^( SHIFT_LEFT expr expr )
                    {
                    match(input,SHIFT_LEFT,FOLLOW_SHIFT_LEFT_in_expr3483); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3485);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3487);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 28 :
                    // JavaASTSecondPass.g:574:9: ^( LESS_THAN expr expr )
                    {
                    match(input,LESS_THAN,FOLLOW_LESS_THAN_in_expr3499); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3501);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3503);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 29 :
                    // JavaASTSecondPass.g:575:9: ^( PLUS expr expr )
                    {
                    match(input,PLUS,FOLLOW_PLUS_in_expr3515); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3517);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3519);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 30 :
                    // JavaASTSecondPass.g:576:9: ^( MINUS expr expr )
                    {
                    match(input,MINUS,FOLLOW_MINUS_in_expr3531); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3533);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3535);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 31 :
                    // JavaASTSecondPass.g:577:9: ^( STAR expr expr )
                    {
                    match(input,STAR,FOLLOW_STAR_in_expr3547); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3549);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3551);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 32 :
                    // JavaASTSecondPass.g:578:9: ^( DIV expr expr )
                    {
                    match(input,DIV,FOLLOW_DIV_in_expr3563); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3565);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3567);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 33 :
                    // JavaASTSecondPass.g:579:9: ^( MOD expr expr )
                    {
                    match(input,MOD,FOLLOW_MOD_in_expr3579); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3581);
                    expr();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3583);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 34 :
                    // JavaASTSecondPass.g:580:9: ^( UNARY_PLUS expr )
                    {
                    match(input,UNARY_PLUS,FOLLOW_UNARY_PLUS_in_expr3595); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3597);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 35 :
                    // JavaASTSecondPass.g:581:9: ^( UNARY_MINUS expr )
                    {
                    match(input,UNARY_MINUS,FOLLOW_UNARY_MINUS_in_expr3609); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3611);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 36 :
                    // JavaASTSecondPass.g:582:9: ^( PRE_INC expr )
                    {
                    match(input,PRE_INC,FOLLOW_PRE_INC_in_expr3623); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3625);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 37 :
                    // JavaASTSecondPass.g:583:9: ^( PRE_DEC expr )
                    {
                    match(input,PRE_DEC,FOLLOW_PRE_DEC_in_expr3637); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3639);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 38 :
                    // JavaASTSecondPass.g:584:9: ^( POST_INC expr )
                    {
                    match(input,POST_INC,FOLLOW_POST_INC_in_expr3651); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3653);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 39 :
                    // JavaASTSecondPass.g:585:9: ^( POST_DEC expr )
                    {
                    match(input,POST_DEC,FOLLOW_POST_DEC_in_expr3665); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3667);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 40 :
                    // JavaASTSecondPass.g:586:9: ^( NOT expr )
                    {
                    match(input,NOT,FOLLOW_NOT_in_expr3679); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3681);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 41 :
                    // JavaASTSecondPass.g:587:9: ^( LOGICAL_NOT expr )
                    {
                    match(input,LOGICAL_NOT,FOLLOW_LOGICAL_NOT_in_expr3693); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3695);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 42 :
                    // JavaASTSecondPass.g:588:9: ^( CAST_EXPR type expr )
                    {
                    match(input,CAST_EXPR,FOLLOW_CAST_EXPR_in_expr3707); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_type_in_expr3709);
                    type();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expr_in_expr3711);
                    expr();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 43 :
                    // JavaASTSecondPass.g:589:9: primaryExpression
                    {
                    pushFollow(FOLLOW_primaryExpression_in_expr3722);
                    primaryExpression();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 62, expr_StartIndex); }
        }
        return ;
    }
    // $ANTLR end expr


    // $ANTLR start primaryExpression
    // JavaASTSecondPass.g:592:1: primaryExpression : ( ^( DOT ( primaryExpression ( IDENT | THIS | SUPER | innerNewExpression | CLASS ) | primitiveType CLASS | VOID CLASS ) ) | parenthesizedExpression | IDENT | ^( METHOD_CALL primaryExpression ( genericTypeArgumentList )? arguments ) | explicitConstructorCall | ^( ARRAY_ELEMENT_ACCESS primaryExpression expression ) | literal | newExpression | THIS | arrayTypeDeclarator | SUPER );
    public final void primaryExpression() throws RecognitionException {
        int primaryExpression_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 63) ) { return ; }
            // JavaASTSecondPass.g:593:5: ( ^( DOT ( primaryExpression ( IDENT | THIS | SUPER | innerNewExpression | CLASS ) | primitiveType CLASS | VOID CLASS ) ) | parenthesizedExpression | IDENT | ^( METHOD_CALL primaryExpression ( genericTypeArgumentList )? arguments ) | explicitConstructorCall | ^( ARRAY_ELEMENT_ACCESS primaryExpression expression ) | literal | newExpression | THIS | arrayTypeDeclarator | SUPER )
            int alt96=11;
            switch ( input.LA(1) ) {
            case DOT:
                {
                alt96=1;
                }
                break;
            case PARENTESIZED_EXPR:
                {
                alt96=2;
                }
                break;
            case IDENT:
                {
                alt96=3;
                }
                break;
            case METHOD_CALL:
                {
                alt96=4;
                }
                break;
            case SUPER_CONSTRUCTOR_CALL:
            case THIS_CONSTRUCTOR_CALL:
                {
                alt96=5;
                }
                break;
            case ARRAY_ELEMENT_ACCESS:
                {
                alt96=6;
                }
                break;
            case FALSE:
            case NULL:
            case TRUE:
            case HEX_LITERAL:
            case OCTAL_LITERAL:
            case DECIMAL_LITERAL:
            case FLOATING_POINT_LITERAL:
            case CHARACTER_LITERAL:
            case STRING_LITERAL:
                {
                alt96=7;
                }
                break;
            case CLASS_CONSTRUCTOR_CALL:
            case STATIC_ARRAY_CREATOR:
                {
                alt96=8;
                }
                break;
            case THIS:
                {
                alt96=9;
                }
                break;
            case ARRAY_DECLARATOR:
                {
                alt96=10;
                }
                break;
            case SUPER:
                {
                alt96=11;
                }
                break;
            default:
                if (backtracking>0) {failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("592:1: primaryExpression : ( ^( DOT ( primaryExpression ( IDENT | THIS | SUPER | innerNewExpression | CLASS ) | primitiveType CLASS | VOID CLASS ) ) | parenthesizedExpression | IDENT | ^( METHOD_CALL primaryExpression ( genericTypeArgumentList )? arguments ) | explicitConstructorCall | ^( ARRAY_ELEMENT_ACCESS primaryExpression expression ) | literal | newExpression | THIS | arrayTypeDeclarator | SUPER );", 96, 0, input);

                throw nvae;
            }

            switch (alt96) {
                case 1 :
                    // JavaASTSecondPass.g:593:9: ^( DOT ( primaryExpression ( IDENT | THIS | SUPER | innerNewExpression | CLASS ) | primitiveType CLASS | VOID CLASS ) )
                    {
                    match(input,DOT,FOLLOW_DOT_in_primaryExpression3748); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    // JavaASTSecondPass.g:594:13: ( primaryExpression ( IDENT | THIS | SUPER | innerNewExpression | CLASS ) | primitiveType CLASS | VOID CLASS )
                    int alt94=3;
                    switch ( input.LA(1) ) {
                    case DOT:
                    case FALSE:
                    case NULL:
                    case SUPER:
                    case THIS:
                    case TRUE:
                    case ARRAY_DECLARATOR:
                    case ARRAY_ELEMENT_ACCESS:
                    case CLASS_CONSTRUCTOR_CALL:
                    case METHOD_CALL:
                    case PARENTESIZED_EXPR:
                    case STATIC_ARRAY_CREATOR:
                    case SUPER_CONSTRUCTOR_CALL:
                    case THIS_CONSTRUCTOR_CALL:
                    case IDENT:
                    case HEX_LITERAL:
                    case OCTAL_LITERAL:
                    case DECIMAL_LITERAL:
                    case FLOATING_POINT_LITERAL:
                    case CHARACTER_LITERAL:
                    case STRING_LITERAL:
                        {
                        alt94=1;
                        }
                        break;
                    case BOOLEAN:
                    case BYTE:
                    case CHAR:
                    case DOUBLE:
                    case FLOAT:
                    case INT:
                    case LONG:
                    case SHORT:
                        {
                        alt94=2;
                        }
                        break;
                    case VOID:
                        {
                        alt94=3;
                        }
                        break;
                    default:
                        if (backtracking>0) {failed=true; return ;}
                        NoViableAltException nvae =
                            new NoViableAltException("594:13: ( primaryExpression ( IDENT | THIS | SUPER | innerNewExpression | CLASS ) | primitiveType CLASS | VOID CLASS )", 94, 0, input);

                        throw nvae;
                    }

                    switch (alt94) {
                        case 1 :
                            // JavaASTSecondPass.g:594:17: primaryExpression ( IDENT | THIS | SUPER | innerNewExpression | CLASS )
                            {
                            pushFollow(FOLLOW_primaryExpression_in_primaryExpression3766);
                            primaryExpression();
                            _fsp--;
                            if (failed) return ;
                            // JavaASTSecondPass.g:595:17: ( IDENT | THIS | SUPER | innerNewExpression | CLASS )
                            int alt93=5;
                            switch ( input.LA(1) ) {
                            case IDENT:
                                {
                                alt93=1;
                                }
                                break;
                            case THIS:
                                {
                                alt93=2;
                                }
                                break;
                            case SUPER:
                                {
                                alt93=3;
                                }
                                break;
                            case CLASS_CONSTRUCTOR_CALL:
                                {
                                alt93=4;
                                }
                                break;
                            case CLASS:
                                {
                                alt93=5;
                                }
                                break;
                            default:
                                if (backtracking>0) {failed=true; return ;}
                                NoViableAltException nvae =
                                    new NoViableAltException("595:17: ( IDENT | THIS | SUPER | innerNewExpression | CLASS )", 93, 0, input);

                                throw nvae;
                            }

                            switch (alt93) {
                                case 1 :
                                    // JavaASTSecondPass.g:595:21: IDENT
                                    {
                                    match(input,IDENT,FOLLOW_IDENT_in_primaryExpression3788); if (failed) return ;

                                    }
                                    break;
                                case 2 :
                                    // JavaASTSecondPass.g:596:21: THIS
                                    {
                                    match(input,THIS,FOLLOW_THIS_in_primaryExpression3810); if (failed) return ;

                                    }
                                    break;
                                case 3 :
                                    // JavaASTSecondPass.g:597:21: SUPER
                                    {
                                    match(input,SUPER,FOLLOW_SUPER_in_primaryExpression3832); if (failed) return ;

                                    }
                                    break;
                                case 4 :
                                    // JavaASTSecondPass.g:598:21: innerNewExpression
                                    {
                                    pushFollow(FOLLOW_innerNewExpression_in_primaryExpression3854);
                                    innerNewExpression();
                                    _fsp--;
                                    if (failed) return ;

                                    }
                                    break;
                                case 5 :
                                    // JavaASTSecondPass.g:599:21: CLASS
                                    {
                                    match(input,CLASS,FOLLOW_CLASS_in_primaryExpression3876); if (failed) return ;

                                    }
                                    break;

                            }


                            }
                            break;
                        case 2 :
                            // JavaASTSecondPass.g:601:17: primitiveType CLASS
                            {
                            pushFollow(FOLLOW_primitiveType_in_primaryExpression3912);
                            primitiveType();
                            _fsp--;
                            if (failed) return ;
                            match(input,CLASS,FOLLOW_CLASS_in_primaryExpression3914); if (failed) return ;

                            }
                            break;
                        case 3 :
                            // JavaASTSecondPass.g:602:17: VOID CLASS
                            {
                            match(input,VOID,FOLLOW_VOID_in_primaryExpression3932); if (failed) return ;
                            match(input,CLASS,FOLLOW_CLASS_in_primaryExpression3934); if (failed) return ;

                            }
                            break;

                    }


                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:605:9: parenthesizedExpression
                    {
                    pushFollow(FOLLOW_parenthesizedExpression_in_primaryExpression3968);
                    parenthesizedExpression();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;
                case 3 :
                    // JavaASTSecondPass.g:606:9: IDENT
                    {
                    match(input,IDENT,FOLLOW_IDENT_in_primaryExpression3978); if (failed) return ;

                    }
                    break;
                case 4 :
                    // JavaASTSecondPass.g:607:9: ^( METHOD_CALL primaryExpression ( genericTypeArgumentList )? arguments )
                    {
                    match(input,METHOD_CALL,FOLLOW_METHOD_CALL_in_primaryExpression3989); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_primaryExpression_in_primaryExpression3991);
                    primaryExpression();
                    _fsp--;
                    if (failed) return ;
                    // JavaASTSecondPass.g:607:41: ( genericTypeArgumentList )?
                    int alt95=2;
                    int LA95_0 = input.LA(1);

                    if ( (LA95_0==GENERIC_TYPE_ARG_LIST) ) {
                        alt95=1;
                    }
                    switch (alt95) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: genericTypeArgumentList
                            {
                            pushFollow(FOLLOW_genericTypeArgumentList_in_primaryExpression3993);
                            genericTypeArgumentList();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    pushFollow(FOLLOW_arguments_in_primaryExpression3996);
                    arguments();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 5 :
                    // JavaASTSecondPass.g:608:9: explicitConstructorCall
                    {
                    pushFollow(FOLLOW_explicitConstructorCall_in_primaryExpression4007);
                    explicitConstructorCall();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;
                case 6 :
                    // JavaASTSecondPass.g:609:9: ^( ARRAY_ELEMENT_ACCESS primaryExpression expression )
                    {
                    match(input,ARRAY_ELEMENT_ACCESS,FOLLOW_ARRAY_ELEMENT_ACCESS_in_primaryExpression4018); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    pushFollow(FOLLOW_primaryExpression_in_primaryExpression4020);
                    primaryExpression();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_expression_in_primaryExpression4022);
                    expression();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 7 :
                    // JavaASTSecondPass.g:610:9: literal
                    {
                    pushFollow(FOLLOW_literal_in_primaryExpression4033);
                    literal();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;
                case 8 :
                    // JavaASTSecondPass.g:611:9: newExpression
                    {
                    pushFollow(FOLLOW_newExpression_in_primaryExpression4043);
                    newExpression();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;
                case 9 :
                    // JavaASTSecondPass.g:612:9: THIS
                    {
                    match(input,THIS,FOLLOW_THIS_in_primaryExpression4053); if (failed) return ;

                    }
                    break;
                case 10 :
                    // JavaASTSecondPass.g:613:9: arrayTypeDeclarator
                    {
                    pushFollow(FOLLOW_arrayTypeDeclarator_in_primaryExpression4063);
                    arrayTypeDeclarator();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;
                case 11 :
                    // JavaASTSecondPass.g:614:9: SUPER
                    {
                    match(input,SUPER,FOLLOW_SUPER_in_primaryExpression4073); if (failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 63, primaryExpression_StartIndex); }
        }
        return ;
    }
    // $ANTLR end primaryExpression


    // $ANTLR start explicitConstructorCall
    // JavaASTSecondPass.g:617:1: explicitConstructorCall : ( ^( THIS_CONSTRUCTOR_CALL ( genericTypeArgumentList )? arguments ) | ^( SUPER_CONSTRUCTOR_CALL ( primaryExpression )? ( genericTypeArgumentList )? arguments ) );
    public final void explicitConstructorCall() throws RecognitionException {
        int explicitConstructorCall_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 64) ) { return ; }
            // JavaASTSecondPass.g:618:5: ( ^( THIS_CONSTRUCTOR_CALL ( genericTypeArgumentList )? arguments ) | ^( SUPER_CONSTRUCTOR_CALL ( primaryExpression )? ( genericTypeArgumentList )? arguments ) )
            int alt100=2;
            int LA100_0 = input.LA(1);

            if ( (LA100_0==THIS_CONSTRUCTOR_CALL) ) {
                alt100=1;
            }
            else if ( (LA100_0==SUPER_CONSTRUCTOR_CALL) ) {
                alt100=2;
            }
            else {
                if (backtracking>0) {failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("617:1: explicitConstructorCall : ( ^( THIS_CONSTRUCTOR_CALL ( genericTypeArgumentList )? arguments ) | ^( SUPER_CONSTRUCTOR_CALL ( primaryExpression )? ( genericTypeArgumentList )? arguments ) );", 100, 0, input);

                throw nvae;
            }
            switch (alt100) {
                case 1 :
                    // JavaASTSecondPass.g:618:9: ^( THIS_CONSTRUCTOR_CALL ( genericTypeArgumentList )? arguments )
                    {
                    match(input,THIS_CONSTRUCTOR_CALL,FOLLOW_THIS_CONSTRUCTOR_CALL_in_explicitConstructorCall4097); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    // JavaASTSecondPass.g:618:33: ( genericTypeArgumentList )?
                    int alt97=2;
                    int LA97_0 = input.LA(1);

                    if ( (LA97_0==GENERIC_TYPE_ARG_LIST) ) {
                        alt97=1;
                    }
                    switch (alt97) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: genericTypeArgumentList
                            {
                            pushFollow(FOLLOW_genericTypeArgumentList_in_explicitConstructorCall4099);
                            genericTypeArgumentList();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    pushFollow(FOLLOW_arguments_in_explicitConstructorCall4102);
                    arguments();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:619:9: ^( SUPER_CONSTRUCTOR_CALL ( primaryExpression )? ( genericTypeArgumentList )? arguments )
                    {
                    match(input,SUPER_CONSTRUCTOR_CALL,FOLLOW_SUPER_CONSTRUCTOR_CALL_in_explicitConstructorCall4114); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    // JavaASTSecondPass.g:619:34: ( primaryExpression )?
                    int alt98=2;
                    int LA98_0 = input.LA(1);

                    if ( (LA98_0==DOT||LA98_0==FALSE||LA98_0==NULL||LA98_0==SUPER||LA98_0==THIS||LA98_0==TRUE||LA98_0==ARRAY_DECLARATOR||LA98_0==ARRAY_ELEMENT_ACCESS||LA98_0==CLASS_CONSTRUCTOR_CALL||LA98_0==METHOD_CALL||LA98_0==PARENTESIZED_EXPR||(LA98_0>=STATIC_ARRAY_CREATOR && LA98_0<=SUPER_CONSTRUCTOR_CALL)||LA98_0==THIS_CONSTRUCTOR_CALL||(LA98_0>=IDENT && LA98_0<=STRING_LITERAL)) ) {
                        alt98=1;
                    }
                    switch (alt98) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: primaryExpression
                            {
                            pushFollow(FOLLOW_primaryExpression_in_explicitConstructorCall4116);
                            primaryExpression();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    // JavaASTSecondPass.g:619:53: ( genericTypeArgumentList )?
                    int alt99=2;
                    int LA99_0 = input.LA(1);

                    if ( (LA99_0==GENERIC_TYPE_ARG_LIST) ) {
                        alt99=1;
                    }
                    switch (alt99) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: genericTypeArgumentList
                            {
                            pushFollow(FOLLOW_genericTypeArgumentList_in_explicitConstructorCall4119);
                            genericTypeArgumentList();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    pushFollow(FOLLOW_arguments_in_explicitConstructorCall4122);
                    arguments();
                    _fsp--;
                    if (failed) return ;

                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 64, explicitConstructorCall_StartIndex); }
        }
        return ;
    }
    // $ANTLR end explicitConstructorCall


    // $ANTLR start arrayTypeDeclarator
    // JavaASTSecondPass.g:622:1: arrayTypeDeclarator : ^( ARRAY_DECLARATOR ( arrayTypeDeclarator | qualifiedIdentifier | primitiveType ) ) ;
    public final void arrayTypeDeclarator() throws RecognitionException {
        int arrayTypeDeclarator_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 65) ) { return ; }
            // JavaASTSecondPass.g:623:5: ( ^( ARRAY_DECLARATOR ( arrayTypeDeclarator | qualifiedIdentifier | primitiveType ) ) )
            // JavaASTSecondPass.g:623:9: ^( ARRAY_DECLARATOR ( arrayTypeDeclarator | qualifiedIdentifier | primitiveType ) )
            {
            match(input,ARRAY_DECLARATOR,FOLLOW_ARRAY_DECLARATOR_in_arrayTypeDeclarator4143); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            // JavaASTSecondPass.g:623:28: ( arrayTypeDeclarator | qualifiedIdentifier | primitiveType )
            int alt101=3;
            switch ( input.LA(1) ) {
            case ARRAY_DECLARATOR:
                {
                alt101=1;
                }
                break;
            case DOT:
            case IDENT:
                {
                alt101=2;
                }
                break;
            case BOOLEAN:
            case BYTE:
            case CHAR:
            case DOUBLE:
            case FLOAT:
            case INT:
            case LONG:
            case SHORT:
                {
                alt101=3;
                }
                break;
            default:
                if (backtracking>0) {failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("623:28: ( arrayTypeDeclarator | qualifiedIdentifier | primitiveType )", 101, 0, input);

                throw nvae;
            }

            switch (alt101) {
                case 1 :
                    // JavaASTSecondPass.g:623:29: arrayTypeDeclarator
                    {
                    pushFollow(FOLLOW_arrayTypeDeclarator_in_arrayTypeDeclarator4146);
                    arrayTypeDeclarator();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:623:51: qualifiedIdentifier
                    {
                    pushFollow(FOLLOW_qualifiedIdentifier_in_arrayTypeDeclarator4150);
                    qualifiedIdentifier();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;
                case 3 :
                    // JavaASTSecondPass.g:623:73: primitiveType
                    {
                    pushFollow(FOLLOW_primitiveType_in_arrayTypeDeclarator4154);
                    primitiveType();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;

            }


            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 65, arrayTypeDeclarator_StartIndex); }
        }
        return ;
    }
    // $ANTLR end arrayTypeDeclarator


    // $ANTLR start newExpression
    // JavaASTSecondPass.g:626:1: newExpression : ( ^( STATIC_ARRAY_CREATOR ( primitiveType newArrayConstruction | ( genericTypeArgumentList )? qualifiedTypeIdent newArrayConstruction ) ) | ^( CLASS_CONSTRUCTOR_CALL ( genericTypeArgumentList )? qualifiedTypeIdent arguments ( classTopLevelScope )? ) );
    public final void newExpression() throws RecognitionException {
        int newExpression_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 66) ) { return ; }
            // JavaASTSecondPass.g:627:5: ( ^( STATIC_ARRAY_CREATOR ( primitiveType newArrayConstruction | ( genericTypeArgumentList )? qualifiedTypeIdent newArrayConstruction ) ) | ^( CLASS_CONSTRUCTOR_CALL ( genericTypeArgumentList )? qualifiedTypeIdent arguments ( classTopLevelScope )? ) )
            int alt106=2;
            int LA106_0 = input.LA(1);

            if ( (LA106_0==STATIC_ARRAY_CREATOR) ) {
                alt106=1;
            }
            else if ( (LA106_0==CLASS_CONSTRUCTOR_CALL) ) {
                alt106=2;
            }
            else {
                if (backtracking>0) {failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("626:1: newExpression : ( ^( STATIC_ARRAY_CREATOR ( primitiveType newArrayConstruction | ( genericTypeArgumentList )? qualifiedTypeIdent newArrayConstruction ) ) | ^( CLASS_CONSTRUCTOR_CALL ( genericTypeArgumentList )? qualifiedTypeIdent arguments ( classTopLevelScope )? ) );", 106, 0, input);

                throw nvae;
            }
            switch (alt106) {
                case 1 :
                    // JavaASTSecondPass.g:627:9: ^( STATIC_ARRAY_CREATOR ( primitiveType newArrayConstruction | ( genericTypeArgumentList )? qualifiedTypeIdent newArrayConstruction ) )
                    {
                    match(input,STATIC_ARRAY_CREATOR,FOLLOW_STATIC_ARRAY_CREATOR_in_newExpression4178); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    // JavaASTSecondPass.g:628:13: ( primitiveType newArrayConstruction | ( genericTypeArgumentList )? qualifiedTypeIdent newArrayConstruction )
                    int alt103=2;
                    int LA103_0 = input.LA(1);

                    if ( (LA103_0==BOOLEAN||LA103_0==BYTE||LA103_0==CHAR||LA103_0==DOUBLE||LA103_0==FLOAT||(LA103_0>=INT && LA103_0<=LONG)||LA103_0==SHORT) ) {
                        alt103=1;
                    }
                    else if ( (LA103_0==GENERIC_TYPE_ARG_LIST||LA103_0==QUALIFIED_TYPE_IDENT) ) {
                        alt103=2;
                    }
                    else {
                        if (backtracking>0) {failed=true; return ;}
                        NoViableAltException nvae =
                            new NoViableAltException("628:13: ( primitiveType newArrayConstruction | ( genericTypeArgumentList )? qualifiedTypeIdent newArrayConstruction )", 103, 0, input);

                        throw nvae;
                    }
                    switch (alt103) {
                        case 1 :
                            // JavaASTSecondPass.g:628:17: primitiveType newArrayConstruction
                            {
                            pushFollow(FOLLOW_primitiveType_in_newExpression4196);
                            primitiveType();
                            _fsp--;
                            if (failed) return ;
                            pushFollow(FOLLOW_newArrayConstruction_in_newExpression4198);
                            newArrayConstruction();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;
                        case 2 :
                            // JavaASTSecondPass.g:629:17: ( genericTypeArgumentList )? qualifiedTypeIdent newArrayConstruction
                            {
                            // JavaASTSecondPass.g:629:17: ( genericTypeArgumentList )?
                            int alt102=2;
                            int LA102_0 = input.LA(1);

                            if ( (LA102_0==GENERIC_TYPE_ARG_LIST) ) {
                                alt102=1;
                            }
                            switch (alt102) {
                                case 1 :
                                    // JavaASTSecondPass.g:0:0: genericTypeArgumentList
                                    {
                                    pushFollow(FOLLOW_genericTypeArgumentList_in_newExpression4216);
                                    genericTypeArgumentList();
                                    _fsp--;
                                    if (failed) return ;

                                    }
                                    break;

                            }

                            pushFollow(FOLLOW_qualifiedTypeIdent_in_newExpression4219);
                            qualifiedTypeIdent();
                            _fsp--;
                            if (failed) return ;
                            pushFollow(FOLLOW_newArrayConstruction_in_newExpression4221);
                            newArrayConstruction();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }


                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:632:9: ^( CLASS_CONSTRUCTOR_CALL ( genericTypeArgumentList )? qualifiedTypeIdent arguments ( classTopLevelScope )? )
                    {
                    match(input,CLASS_CONSTRUCTOR_CALL,FOLLOW_CLASS_CONSTRUCTOR_CALL_in_newExpression4256); if (failed) return ;

                    match(input, Token.DOWN, null); if (failed) return ;
                    // JavaASTSecondPass.g:632:34: ( genericTypeArgumentList )?
                    int alt104=2;
                    int LA104_0 = input.LA(1);

                    if ( (LA104_0==GENERIC_TYPE_ARG_LIST) ) {
                        alt104=1;
                    }
                    switch (alt104) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: genericTypeArgumentList
                            {
                            pushFollow(FOLLOW_genericTypeArgumentList_in_newExpression4258);
                            genericTypeArgumentList();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }

                    pushFollow(FOLLOW_qualifiedTypeIdent_in_newExpression4261);
                    qualifiedTypeIdent();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_arguments_in_newExpression4263);
                    arguments();
                    _fsp--;
                    if (failed) return ;
                    // JavaASTSecondPass.g:632:88: ( classTopLevelScope )?
                    int alt105=2;
                    int LA105_0 = input.LA(1);

                    if ( (LA105_0==CLASS_TOP_LEVEL_SCOPE) ) {
                        alt105=1;
                    }
                    switch (alt105) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: classTopLevelScope
                            {
                            pushFollow(FOLLOW_classTopLevelScope_in_newExpression4265);
                            classTopLevelScope();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }


                    match(input, Token.UP, null); if (failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 66, newExpression_StartIndex); }
        }
        return ;
    }
    // $ANTLR end newExpression


    // $ANTLR start innerNewExpression
    // JavaASTSecondPass.g:635:1: innerNewExpression : ^( CLASS_CONSTRUCTOR_CALL ( genericTypeArgumentList )? IDENT arguments ( classTopLevelScope )? ) ;
    public final void innerNewExpression() throws RecognitionException {
        int innerNewExpression_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 67) ) { return ; }
            // JavaASTSecondPass.g:636:5: ( ^( CLASS_CONSTRUCTOR_CALL ( genericTypeArgumentList )? IDENT arguments ( classTopLevelScope )? ) )
            // JavaASTSecondPass.g:636:9: ^( CLASS_CONSTRUCTOR_CALL ( genericTypeArgumentList )? IDENT arguments ( classTopLevelScope )? )
            {
            match(input,CLASS_CONSTRUCTOR_CALL,FOLLOW_CLASS_CONSTRUCTOR_CALL_in_innerNewExpression4288); if (failed) return ;

            match(input, Token.DOWN, null); if (failed) return ;
            // JavaASTSecondPass.g:636:34: ( genericTypeArgumentList )?
            int alt107=2;
            int LA107_0 = input.LA(1);

            if ( (LA107_0==GENERIC_TYPE_ARG_LIST) ) {
                alt107=1;
            }
            switch (alt107) {
                case 1 :
                    // JavaASTSecondPass.g:0:0: genericTypeArgumentList
                    {
                    pushFollow(FOLLOW_genericTypeArgumentList_in_innerNewExpression4290);
                    genericTypeArgumentList();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;

            }

            match(input,IDENT,FOLLOW_IDENT_in_innerNewExpression4293); if (failed) return ;
            pushFollow(FOLLOW_arguments_in_innerNewExpression4295);
            arguments();
            _fsp--;
            if (failed) return ;
            // JavaASTSecondPass.g:636:75: ( classTopLevelScope )?
            int alt108=2;
            int LA108_0 = input.LA(1);

            if ( (LA108_0==CLASS_TOP_LEVEL_SCOPE) ) {
                alt108=1;
            }
            switch (alt108) {
                case 1 :
                    // JavaASTSecondPass.g:0:0: classTopLevelScope
                    {
                    pushFollow(FOLLOW_classTopLevelScope_in_innerNewExpression4297);
                    classTopLevelScope();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;

            }


            match(input, Token.UP, null); if (failed) return ;

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 67, innerNewExpression_StartIndex); }
        }
        return ;
    }
    // $ANTLR end innerNewExpression


    // $ANTLR start newArrayConstruction
    // JavaASTSecondPass.g:639:1: newArrayConstruction : ( arrayDeclaratorList arrayInitializer | ( expression )+ ( arrayDeclaratorList )? );
    public final void newArrayConstruction() throws RecognitionException {
        int newArrayConstruction_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 68) ) { return ; }
            // JavaASTSecondPass.g:640:5: ( arrayDeclaratorList arrayInitializer | ( expression )+ ( arrayDeclaratorList )? )
            int alt111=2;
            int LA111_0 = input.LA(1);

            if ( (LA111_0==ARRAY_DECLARATOR_LIST) ) {
                alt111=1;
            }
            else if ( (LA111_0==EXPR) ) {
                alt111=2;
            }
            else {
                if (backtracking>0) {failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("639:1: newArrayConstruction : ( arrayDeclaratorList arrayInitializer | ( expression )+ ( arrayDeclaratorList )? );", 111, 0, input);

                throw nvae;
            }
            switch (alt111) {
                case 1 :
                    // JavaASTSecondPass.g:640:9: arrayDeclaratorList arrayInitializer
                    {
                    pushFollow(FOLLOW_arrayDeclaratorList_in_newArrayConstruction4322);
                    arrayDeclaratorList();
                    _fsp--;
                    if (failed) return ;
                    pushFollow(FOLLOW_arrayInitializer_in_newArrayConstruction4324);
                    arrayInitializer();
                    _fsp--;
                    if (failed) return ;

                    }
                    break;
                case 2 :
                    // JavaASTSecondPass.g:641:9: ( expression )+ ( arrayDeclaratorList )?
                    {
                    // JavaASTSecondPass.g:641:9: ( expression )+
                    int cnt109=0;
                    loop109:
                    do {
                        int alt109=2;
                        int LA109_0 = input.LA(1);

                        if ( (LA109_0==EXPR) ) {
                            alt109=1;
                        }


                        switch (alt109) {
                    	case 1 :
                    	    // JavaASTSecondPass.g:0:0: expression
                    	    {
                    	    pushFollow(FOLLOW_expression_in_newArrayConstruction4334);
                    	    expression();
                    	    _fsp--;
                    	    if (failed) return ;

                    	    }
                    	    break;

                    	default :
                    	    if ( cnt109 >= 1 ) break loop109;
                    	    if (backtracking>0) {failed=true; return ;}
                                EarlyExitException eee =
                                    new EarlyExitException(109, input);
                                throw eee;
                        }
                        cnt109++;
                    } while (true);

                    // JavaASTSecondPass.g:641:21: ( arrayDeclaratorList )?
                    int alt110=2;
                    int LA110_0 = input.LA(1);

                    if ( (LA110_0==ARRAY_DECLARATOR_LIST) ) {
                        alt110=1;
                    }
                    switch (alt110) {
                        case 1 :
                            // JavaASTSecondPass.g:0:0: arrayDeclaratorList
                            {
                            pushFollow(FOLLOW_arrayDeclaratorList_in_newArrayConstruction4337);
                            arrayDeclaratorList();
                            _fsp--;
                            if (failed) return ;

                            }
                            break;

                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 68, newArrayConstruction_StartIndex); }
        }
        return ;
    }
    // $ANTLR end newArrayConstruction


    // $ANTLR start arguments
    // JavaASTSecondPass.g:644:1: arguments : ^( ARGUMENT_LIST ( expression )* ) ;
    public final void arguments() throws RecognitionException {
        int arguments_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 69) ) { return ; }
            // JavaASTSecondPass.g:645:5: ( ^( ARGUMENT_LIST ( expression )* ) )
            // JavaASTSecondPass.g:645:9: ^( ARGUMENT_LIST ( expression )* )
            {
            match(input,ARGUMENT_LIST,FOLLOW_ARGUMENT_LIST_in_arguments4358); if (failed) return ;

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); if (failed) return ;
                // JavaASTSecondPass.g:645:25: ( expression )*
                loop112:
                do {
                    int alt112=2;
                    int LA112_0 = input.LA(1);

                    if ( (LA112_0==EXPR) ) {
                        alt112=1;
                    }


                    switch (alt112) {
                	case 1 :
                	    // JavaASTSecondPass.g:0:0: expression
                	    {
                	    pushFollow(FOLLOW_expression_in_arguments4360);
                	    expression();
                	    _fsp--;
                	    if (failed) return ;

                	    }
                	    break;

                	default :
                	    break loop112;
                    }
                } while (true);


                match(input, Token.UP, null); if (failed) return ;
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 69, arguments_StartIndex); }
        }
        return ;
    }
    // $ANTLR end arguments


    // $ANTLR start literal
    // JavaASTSecondPass.g:648:1: literal : ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | FLOATING_POINT_LITERAL | CHARACTER_LITERAL | STRING_LITERAL | TRUE | FALSE | NULL );
    public final void literal() throws RecognitionException {
        int literal_StartIndex = input.index();
        try {
            if ( backtracking>0 && alreadyParsedRule(input, 70) ) { return ; }
            // JavaASTSecondPass.g:649:5: ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | FLOATING_POINT_LITERAL | CHARACTER_LITERAL | STRING_LITERAL | TRUE | FALSE | NULL )
            // JavaASTSecondPass.g:
            {
            if ( input.LA(1)==FALSE||input.LA(1)==NULL||input.LA(1)==TRUE||(input.LA(1)>=HEX_LITERAL && input.LA(1)<=STRING_LITERAL) ) {
                input.consume();
                errorRecovery=false;failed=false;
            }
            else {
                if (backtracking>0) {failed=true; return ;}
                MismatchedSetException mse =
                    new MismatchedSetException(null,input);
                recoverFromMismatchedSet(input,mse,FOLLOW_set_in_literal0);    throw mse;
            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
            if ( backtracking>0 ) { memoize(input, 70, literal_StartIndex); }
        }
        return ;
    }
    // $ANTLR end literal

    // $ANTLR start synpred125
    public final void synpred125_fragment() throws RecognitionException {   
        // JavaASTSecondPass.g:513:35: ( switchCaseLabel )
        // JavaASTSecondPass.g:513:35: switchCaseLabel
        {
        pushFollow(FOLLOW_switchCaseLabel_in_synpred1252828);
        switchCaseLabel();
        _fsp--;
        if (failed) return ;

        }
    }
    // $ANTLR end synpred125

    // $ANTLR start synpred132
    public final void synpred132_fragment() throws RecognitionException {   
        // JavaASTSecondPass.g:525:48: ( ( expression )* )
        // JavaASTSecondPass.g:525:48: ( expression )*
        {
        // JavaASTSecondPass.g:525:48: ( expression )*
        loop143:
        do {
            int alt143=2;
            int LA143_0 = input.LA(1);

            if ( (LA143_0==EXPR) ) {
                alt143=1;
            }


            switch (alt143) {
        	case 1 :
        	    // JavaASTSecondPass.g:0:0: expression
        	    {
        	    pushFollow(FOLLOW_expression_in_synpred1322929);
        	    expression();
        	    _fsp--;
        	    if (failed) return ;

        	    }
        	    break;

        	default :
        	    break loop143;
            }
        } while (true);


        }
    }
    // $ANTLR end synpred132

    public final boolean synpred125() {
        backtracking++;
        int start = input.mark();
        try {
            synpred125_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !failed;
        input.rewind(start);
        backtracking--;
        failed=false;
        return success;
    }
    public final boolean synpred132() {
        backtracking++;
        int start = input.mark();
        try {
            synpred132_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !failed;
        input.rewind(start);
        backtracking--;
        failed=false;
        return success;
    }


 

    public static final BitSet FOLLOW_JAVA_SOURCE_in_javaSource96 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_annotationList_in_javaSource98 = new BitSet(new long[]{0x2000000000000088L,0x0000000000106008L});
    public static final BitSet FOLLOW_packageDeclaration_in_javaSource100 = new BitSet(new long[]{0x2000000000000088L,0x0000000000006008L});
    public static final BitSet FOLLOW_importDeclaration_in_javaSource103 = new BitSet(new long[]{0x2000000000000088L,0x0000000000006008L});
    public static final BitSet FOLLOW_typeDeclaration_in_javaSource106 = new BitSet(new long[]{0x2000000000000088L,0x0000000000002008L});
    public static final BitSet FOLLOW_PACKAGE_in_packageDeclaration125 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_qualifiedIdentifier_in_packageDeclaration129 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_IMPORT_in_importDeclaration157 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_STATIC_in_importDeclaration159 = new BitSet(new long[]{0x0000000000008000L,0x0000000000000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_qualifiedIdentifier_in_importDeclaration164 = new BitSet(new long[]{0x0000000000010008L});
    public static final BitSet FOLLOW_DOTSTAR_in_importDeclaration166 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_CLASS_in_typeDeclaration199 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_modifierList_in_typeDeclaration201 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_IDENT_in_typeDeclaration205 = new BitSet(new long[]{0x0000000000000000L,0x0800000000000000L,0x0000000000001401L});
    public static final BitSet FOLLOW_genericTypeParameterList_in_typeDeclaration219 = new BitSet(new long[]{0x0000000000000000L,0x0800000000000000L,0x0000000000001001L});
    public static final BitSet FOLLOW_extendsClause_in_typeDeclaration222 = new BitSet(new long[]{0x0000000000000000L,0x0800000000000000L,0x0000000000001000L});
    public static final BitSet FOLLOW_implementsClause_in_typeDeclaration225 = new BitSet(new long[]{0x0000000000000000L,0x0800000000000000L});
    public static final BitSet FOLLOW_classTopLevelScope_in_typeDeclaration228 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_INTERFACE_in_typeDeclaration248 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_modifierList_in_typeDeclaration250 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_IDENT_in_typeDeclaration254 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000C01L});
    public static final BitSet FOLLOW_genericTypeParameterList_in_typeDeclaration268 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000801L});
    public static final BitSet FOLLOW_extendsClause_in_typeDeclaration271 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
    public static final BitSet FOLLOW_interfaceTopLevelScope_in_typeDeclaration274 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_ENUM_in_typeDeclaration292 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_modifierList_in_typeDeclaration294 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_IDENT_in_typeDeclaration298 = new BitSet(new long[]{0x0000000000000000L,0x2000000000000000L,0x0000000000001000L});
    public static final BitSet FOLLOW_implementsClause_in_typeDeclaration312 = new BitSet(new long[]{0x0000000000000000L,0x2000000000000000L});
    public static final BitSet FOLLOW_enumTopLevelScope_in_typeDeclaration315 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_AT_in_typeDeclaration333 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_modifierList_in_typeDeclaration335 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_IDENT_in_typeDeclaration337 = new BitSet(new long[]{0x0000000000000000L,0x0000800000000000L});
    public static final BitSet FOLLOW_annotationTopLevelScope_in_typeDeclaration339 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_EXTENDS_CLAUSE_in_extendsClause382 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_type_in_extendsClause384 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000000020000000L});
    public static final BitSet FOLLOW_IMPLEMENTS_CLAUSE_in_implementsClause413 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_type_in_implementsClause415 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000000020000000L});
    public static final BitSet FOLLOW_GENERIC_TYPE_PARAM_LIST_in_genericTypeParameterList445 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_genericTypeParameter_in_genericTypeParameterList447 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_IDENT_in_genericTypeParameter469 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_bound_in_genericTypeParameter471 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_EXTENDS_BOUND_LIST_in_bound501 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_type_in_bound503 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000000020000000L});
    public static final BitSet FOLLOW_ENUM_TOP_LEVEL_SCOPE_in_enumTopLevelScope525 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_enumConstant_in_enumTopLevelScope527 = new BitSet(new long[]{0x0000000000000008L,0x0800000000000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_classTopLevelScope_in_enumTopLevelScope530 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_IDENT_in_enumConstant556 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_annotationList_in_enumConstant558 = new BitSet(new long[]{0x0000000000000008L,0x0801000000000000L});
    public static final BitSet FOLLOW_arguments_in_enumConstant560 = new BitSet(new long[]{0x0000000000000008L,0x0800000000000000L});
    public static final BitSet FOLLOW_classTopLevelScope_in_enumConstant563 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_CLASS_TOP_LEVEL_SCOPE_in_classTopLevelScope594 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_classScopeDeclarations_in_classTopLevelScope596 = new BitSet(new long[]{0x2000000000000088L,0x1600000000002008L,0x0000000900000100L});
    public static final BitSet FOLLOW_CLASS_INSTANCE_INITIALIZER_in_classScopeDeclarations622 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_block_in_classScopeDeclarations624 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_CLASS_STATIC_INITIALIZER_in_classScopeDeclarations636 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_block_in_classScopeDeclarations638 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_FUNCTION_METHOD_DECL_in_classScopeDeclarations650 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_modifierList_in_classScopeDeclarations652 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000020000400L});
    public static final BitSet FOLLOW_genericTypeParameterList_in_classScopeDeclarations654 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000020000000L});
    public static final BitSet FOLLOW_type_in_classScopeDeclarations657 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_IDENT_in_classScopeDeclarations661 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_formalParameterList_in_classScopeDeclarations677 = new BitSet(new long[]{0x0000000000000008L,0x0024000000000000L,0x0000000010000000L});
    public static final BitSet FOLLOW_arrayDeclaratorList_in_classScopeDeclarations693 = new BitSet(new long[]{0x0000000000000008L,0x0020000000000000L,0x0000000010000000L});
    public static final BitSet FOLLOW_throwsClause_in_classScopeDeclarations696 = new BitSet(new long[]{0x0000000000000008L,0x0020000000000000L});
    public static final BitSet FOLLOW_block_in_classScopeDeclarations699 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VOID_METHOD_DECL_in_classScopeDeclarations712 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_modifierList_in_classScopeDeclarations714 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000001000000400L});
    public static final BitSet FOLLOW_genericTypeParameterList_in_classScopeDeclarations716 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_IDENT_in_classScopeDeclarations721 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_formalParameterList_in_classScopeDeclarations736 = new BitSet(new long[]{0x0000000000000008L,0x0020000000000000L,0x0000000010000000L});
    public static final BitSet FOLLOW_throwsClause_in_classScopeDeclarations752 = new BitSet(new long[]{0x0000000000000008L,0x0020000000000000L});
    public static final BitSet FOLLOW_block_in_classScopeDeclarations755 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VAR_DECLARATION_in_classScopeDeclarations768 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_modifierList_in_classScopeDeclarations770 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000020000000L});
    public static final BitSet FOLLOW_type_in_classScopeDeclarations774 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000400000000L});
    public static final BitSet FOLLOW_variableDeclaratorList_in_classScopeDeclarations788 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_CONSTRUCTOR_DECL_in_classScopeDeclarations813 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_modifierList_in_classScopeDeclarations815 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000420L});
    public static final BitSet FOLLOW_genericTypeParameterList_in_classScopeDeclarations817 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_formalParameterList_in_classScopeDeclarations820 = new BitSet(new long[]{0x0000000000000000L,0x0020000000000000L,0x0000000010000000L});
    public static final BitSet FOLLOW_throwsClause_in_classScopeDeclarations822 = new BitSet(new long[]{0x0000000000000000L,0x0020000000000000L});
    public static final BitSet FOLLOW_block_in_classScopeDeclarations825 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_typeDeclaration_in_classScopeDeclarations836 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_INTERFACE_TOP_LEVEL_SCOPE_in_interfaceTopLevelScope860 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_interfaceScopeDeclarations_in_interfaceTopLevelScope862 = new BitSet(new long[]{0x2000000000000088L,0x0000000000002008L,0x0000000900000100L});
    public static final BitSet FOLLOW_FUNCTION_METHOD_DECL_in_interfaceScopeDeclarations888 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_modifierList_in_interfaceScopeDeclarations890 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000020000400L});
    public static final BitSet FOLLOW_genericTypeParameterList_in_interfaceScopeDeclarations892 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000020000000L});
    public static final BitSet FOLLOW_type_in_interfaceScopeDeclarations895 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_IDENT_in_interfaceScopeDeclarations897 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_formalParameterList_in_interfaceScopeDeclarations899 = new BitSet(new long[]{0x0000000000000008L,0x0004000000000000L,0x0000000010000000L});
    public static final BitSet FOLLOW_arrayDeclaratorList_in_interfaceScopeDeclarations901 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000000010000000L});
    public static final BitSet FOLLOW_throwsClause_in_interfaceScopeDeclarations904 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VOID_METHOD_DECL_in_interfaceScopeDeclarations917 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_modifierList_in_interfaceScopeDeclarations919 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000001000000400L});
    public static final BitSet FOLLOW_genericTypeParameterList_in_interfaceScopeDeclarations921 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_IDENT_in_interfaceScopeDeclarations924 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_formalParameterList_in_interfaceScopeDeclarations926 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000000010000000L});
    public static final BitSet FOLLOW_throwsClause_in_interfaceScopeDeclarations928 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VAR_DECLARATION_in_interfaceScopeDeclarations1019 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_modifierList_in_interfaceScopeDeclarations1021 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000020000000L});
    public static final BitSet FOLLOW_type_in_interfaceScopeDeclarations1023 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000400000000L});
    public static final BitSet FOLLOW_variableDeclaratorList_in_interfaceScopeDeclarations1025 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_typeDeclaration_in_interfaceScopeDeclarations1036 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_VAR_DECLARATOR_LIST_in_variableDeclaratorList1056 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_variableDeclarator_in_variableDeclaratorList1058 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000000200000000L});
    public static final BitSet FOLLOW_VAR_DECLARATOR_in_variableDeclarator1080 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_variableDeclaratorId_in_variableDeclarator1084 = new BitSet(new long[]{0x0000000000000008L,0x4010000000000000L});
    public static final BitSet FOLLOW_variableInitializer_in_variableDeclarator1099 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_IDENT_in_variableDeclaratorId1125 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_arrayDeclaratorList_in_variableDeclaratorId1127 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_arrayInitializer_in_variableInitializer1148 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_expression_in_variableInitializer1158 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_LBRACK_in_arrayDeclarator1177 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_RBRACK_in_arrayDeclarator1179 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ARRAY_DECLARATOR_LIST_in_arrayDeclaratorList1199 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_ARRAY_DECLARATOR_in_arrayDeclaratorList1201 = new BitSet(new long[]{0x0000000000000008L,0x0002000000000000L});
    public static final BitSet FOLLOW_ARRAY_INITIALIZER_in_arrayInitializer1229 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_variableInitializer_in_arrayInitializer1231 = new BitSet(new long[]{0x0000000000000008L,0x4010000000000000L});
    public static final BitSet FOLLOW_THROWS_CLAUSE_in_throwsClause1253 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_qualifiedIdentifier_in_throwsClause1255 = new BitSet(new long[]{0x0000000000008008L,0x0000000000000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_MODIFIER_LIST_in_modifierList1277 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_modifier_in_modifierList1279 = new BitSet(new long[]{0x0020000000000088L,0x000000444CE20040L});
    public static final BitSet FOLLOW_PUBLIC_in_modifier1300 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_PROTECTED_in_modifier1310 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_PRIVATE_in_modifier1320 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_STATIC_in_modifier1330 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ABSTRACT_in_modifier1340 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_NATIVE_in_modifier1350 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_SYNCHRONIZED_in_modifier1360 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_TRANSIENT_in_modifier1370 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_VOLATILE_in_modifier1380 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_STRICTFP_in_modifier1390 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_localModifier_in_modifier1400 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_LOCAL_MODIFIER_LIST_in_localModifierList1420 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_localModifier_in_localModifierList1422 = new BitSet(new long[]{0x0000000000000088L,0x0000000000000040L});
    public static final BitSet FOLLOW_FINAL_in_localModifier1443 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_annotation_in_localModifier1453 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_TYPE_in_type1477 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_primitiveType_in_type1487 = new BitSet(new long[]{0x0000000000000008L,0x0004000000000000L});
    public static final BitSet FOLLOW_qualifiedTypeIdent_in_type1501 = new BitSet(new long[]{0x0000000000000008L,0x0004000000000000L});
    public static final BitSet FOLLOW_arrayDeclaratorList_in_type1508 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_QUALIFIED_TYPE_IDENT_in_qualifiedTypeIdent1530 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_typeIdent_in_qualifiedTypeIdent1532 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_IDENT_in_typeIdent1555 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_genericTypeArgumentList_in_typeIdent1557 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_BOOLEAN_in_primitiveType1583 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CHAR_in_primitiveType1596 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_BYTE_in_primitiveType1609 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_SHORT_in_primitiveType1622 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_INT_in_primitiveType1635 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_LONG_in_primitiveType1649 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_FLOAT_in_primitiveType1662 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_DOUBLE_in_primitiveType1675 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_GENERIC_TYPE_ARG_LIST_in_genericTypeArgumentList1698 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_genericTypeArgument_in_genericTypeArgumentList1700 = new BitSet(new long[]{0x0000010000000008L,0x0000000000000000L,0x0000000020000000L});
    public static final BitSet FOLLOW_type_in_genericTypeArgument1725 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_QUESTION_in_genericTypeArgument1736 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_genericWildcardBoundType_in_genericTypeArgument1738 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_EXTENDS_in_genericWildcardBoundType1878 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_type_in_genericWildcardBoundType1880 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_SUPER_in_genericWildcardBoundType1892 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_type_in_genericWildcardBoundType1894 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_FORMAL_PARAM_LIST_in_formalParameterList1915 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_formalParameterStandardDecl_in_formalParameterList1917 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x00000000000000C0L});
    public static final BitSet FOLLOW_formalParameterVarargDecl_in_formalParameterList1920 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_FORMAL_PARAM_STD_DECL_in_formalParameterStandardDecl1947 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_localModifierList_in_formalParameterStandardDecl1949 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000020000000L});
    public static final BitSet FOLLOW_type_in_formalParameterStandardDecl1953 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_variableDeclaratorId_in_formalParameterStandardDecl1968 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_FORMAL_PARAM_VARARG_DECL_in_formalParameterVarargDecl1993 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_localModifierList_in_formalParameterVarargDecl1995 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000020000000L});
    public static final BitSet FOLLOW_type_in_formalParameterVarargDecl1997 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_variableDeclaratorId_in_formalParameterVarargDecl1999 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_IDENT_in_qualifiedIdentifier2023 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_DOT_in_qualifiedIdentifier2034 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_qualifiedIdentifier_in_qualifiedIdentifier2036 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_IDENT_in_qualifiedIdentifier2038 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_ANNOTATION_LIST_in_annotationList2065 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_annotation_in_annotationList2067 = new BitSet(new long[]{0x0000000000000088L});
    public static final BitSet FOLLOW_AT_in_annotation2089 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_qualifiedIdentifier_in_annotation2091 = new BitSet(new long[]{0x0000000000000008L,0x0000020000000000L});
    public static final BitSet FOLLOW_annotationInit_in_annotation2093 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_ANNOTATION_INIT_BLOCK_in_annotationInit2119 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_annotationInitializers_in_annotationInit2121 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_ANNOTATION_INIT_KEY_LIST_in_annotationInitializers2142 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_annotationInitializer_in_annotationInitializers2144 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_ANNOTATION_INIT_DEFAULT_KEY_in_annotationInitializers2157 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_annotationElementValue_in_annotationInitializers2159 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_IDENT_in_annotationInitializer2184 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_annotationElementValue_in_annotationInitializer2186 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_ANNOTATION_INIT_ARRAY_ELEMENT_in_annotationElementValue2211 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_annotationElementValue_in_annotationElementValue2213 = new BitSet(new long[]{0x0000000000000088L,0x4000010000000000L});
    public static final BitSet FOLLOW_annotation_in_annotationElementValue2225 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_expression_in_annotationElementValue2235 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ANNOTATION_TOP_LEVEL_SCOPE_in_annotationTopLevelScope2259 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_annotationScopeDeclarations_in_annotationTopLevelScope2261 = new BitSet(new long[]{0x2000000000000088L,0x0000200000002008L,0x0000000100000000L});
    public static final BitSet FOLLOW_ANNOTATION_METHOD_DECL_in_annotationScopeDeclarations2287 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_modifierList_in_annotationScopeDeclarations2289 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000020000000L});
    public static final BitSet FOLLOW_type_in_annotationScopeDeclarations2291 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_IDENT_in_annotationScopeDeclarations2293 = new BitSet(new long[]{0x8000000000000008L});
    public static final BitSet FOLLOW_annotationDefaultValue_in_annotationScopeDeclarations2295 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VAR_DECLARATION_in_annotationScopeDeclarations2308 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_modifierList_in_annotationScopeDeclarations2310 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000020000000L});
    public static final BitSet FOLLOW_type_in_annotationScopeDeclarations2312 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000400000000L});
    public static final BitSet FOLLOW_variableDeclaratorList_in_annotationScopeDeclarations2314 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_typeDeclaration_in_annotationScopeDeclarations2325 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_DEFAULT_in_annotationDefaultValue2349 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_annotationElementValue_in_annotationDefaultValue2351 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_BLOCK_SCOPE_in_block2374 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_blockStatement_in_block2376 = new BitSet(new long[]{0x6140100000000088L,0x4020009161002609L,0x0000000100002004L});
    public static final BitSet FOLLOW_localVariableDeclaration_in_blockStatement2401 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_typeDeclaration_in_blockStatement2411 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_statement_in_blockStatement2421 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_VAR_DECLARATION_in_localVariableDeclaration2445 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_localModifierList_in_localVariableDeclaration2447 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000020000000L});
    public static final BitSet FOLLOW_type_in_localVariableDeclaration2449 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000400000000L});
    public static final BitSet FOLLOW_variableDeclaratorList_in_localVariableDeclaration2451 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_block_in_statement2484 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ASSERT_in_statement2495 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expression_in_statement2497 = new BitSet(new long[]{0x0000000000000008L,0x4000000000000000L});
    public static final BitSet FOLLOW_expression_in_statement2499 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_IF_in_statement2512 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_parenthesizedExpression_in_statement2514 = new BitSet(new long[]{0x4140100000000000L,0x4020009161000601L,0x0000000000002004L});
    public static final BitSet FOLLOW_statement_in_statement2516 = new BitSet(new long[]{0x4140100000000008L,0x4020009161000601L,0x0000000000002004L});
    public static final BitSet FOLLOW_statement_in_statement2518 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_FOR_in_statement2531 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_forInit_in_statement2533 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
    public static final BitSet FOLLOW_forCondition_in_statement2535 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000010L});
    public static final BitSet FOLLOW_forUpdater_in_statement2537 = new BitSet(new long[]{0x4140100000000000L,0x4020009161000601L,0x0000000000002004L});
    public static final BitSet FOLLOW_statement_in_statement2539 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_FOR_EACH_in_statement2551 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_localModifierList_in_statement2553 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000020000000L});
    public static final BitSet FOLLOW_type_in_statement2555 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_IDENT_in_statement2557 = new BitSet(new long[]{0x0000000000000000L,0x4000000000000000L});
    public static final BitSet FOLLOW_expression_in_statement2559 = new BitSet(new long[]{0x4140100000000000L,0x4020009161000601L,0x0000000000002004L});
    public static final BitSet FOLLOW_statement_in_statement2561 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_WHILE_in_statement2574 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_parenthesizedExpression_in_statement2576 = new BitSet(new long[]{0x4140100000000000L,0x4020009161000601L,0x0000000000002004L});
    public static final BitSet FOLLOW_statement_in_statement2578 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_DO_in_statement2590 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_statement_in_statement2592 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000040000L});
    public static final BitSet FOLLOW_parenthesizedExpression_in_statement2594 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_TRY_in_statement2606 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_block_in_statement2608 = new BitSet(new long[]{0x0000000000000008L,0x00A0000000000000L});
    public static final BitSet FOLLOW_catches_in_statement2610 = new BitSet(new long[]{0x0000000000000008L,0x0020000000000000L});
    public static final BitSet FOLLOW_block_in_statement2613 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_SWITCH_in_statement2628 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_parenthesizedExpression_in_statement2630 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000004000000L});
    public static final BitSet FOLLOW_switchBlockLabels_in_statement2632 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_SYNCHRONIZED_in_statement2644 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_parenthesizedExpression_in_statement2646 = new BitSet(new long[]{0x0000000000000000L,0x0020000000000000L});
    public static final BitSet FOLLOW_block_in_statement2648 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_RETURN_in_statement2660 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expression_in_statement2662 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_THROW_in_statement2675 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expression_in_statement2677 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_BREAK_in_statement2689 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_IDENT_in_statement2691 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_CONTINUE_in_statement2704 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_IDENT_in_statement2706 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_LABELED_STATEMENT_in_statement2719 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_IDENT_in_statement2721 = new BitSet(new long[]{0x4140100000000000L,0x4020009161000601L,0x0000000000002004L});
    public static final BitSet FOLLOW_statement_in_statement2723 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_expression_in_statement2734 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_SEMI_in_statement2744 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CATCH_CLAUSE_LIST_in_catches2773 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_catchClause_in_catches2775 = new BitSet(new long[]{0x0800000000000008L});
    public static final BitSet FOLLOW_CATCH_in_catchClause2801 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_formalParameterStandardDecl_in_catchClause2803 = new BitSet(new long[]{0x0000000000000000L,0x0020000000000000L});
    public static final BitSet FOLLOW_block_in_catchClause2805 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_SWITCH_BLOCK_LABEL_LIST_in_switchBlockLabels2826 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_switchCaseLabel_in_switchBlockLabels2828 = new BitSet(new long[]{0x8400000000000008L});
    public static final BitSet FOLLOW_switchDefaultLabel_in_switchBlockLabels2831 = new BitSet(new long[]{0x0400000000000008L});
    public static final BitSet FOLLOW_switchCaseLabel_in_switchBlockLabels2834 = new BitSet(new long[]{0x0400000000000008L});
    public static final BitSet FOLLOW_CASE_in_switchCaseLabel2864 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expression_in_switchCaseLabel2866 = new BitSet(new long[]{0x6140100000000088L,0x4020009161002609L,0x0000000100002004L});
    public static final BitSet FOLLOW_blockStatement_in_switchCaseLabel2868 = new BitSet(new long[]{0x6140100000000088L,0x4020009161002609L,0x0000000100002004L});
    public static final BitSet FOLLOW_DEFAULT_in_switchDefaultLabel2894 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_blockStatement_in_switchDefaultLabel2896 = new BitSet(new long[]{0x6140100000000088L,0x4020009161002609L,0x0000000100002004L});
    public static final BitSet FOLLOW_FOR_INIT_in_forInit2922 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_localVariableDeclaration_in_forInit2925 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_expression_in_forInit2929 = new BitSet(new long[]{0x0000000000000008L,0x4000000000000000L});
    public static final BitSet FOLLOW_FOR_CONDITION_in_forCondition2957 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expression_in_forCondition2959 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_FOR_UPDATE_in_forUpdater2985 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expression_in_forUpdater2987 = new BitSet(new long[]{0x0000000000000008L,0x4000000000000000L});
    public static final BitSet FOLLOW_PARENTESIZED_EXPR_in_parenthesizedExpression3015 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expression_in_parenthesizedExpression3017 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_EXPR_in_expression3042 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expression3044 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_ASSIGN_in_expr3065 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3067 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3069 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_PLUS_ASSIGN_in_expr3081 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3083 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3085 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_MINUS_ASSIGN_in_expr3097 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3099 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3101 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_STAR_ASSIGN_in_expr3113 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3115 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3117 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_DIV_ASSIGN_in_expr3129 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3131 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3133 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_AND_ASSIGN_in_expr3145 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3147 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3149 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_OR_ASSIGN_in_expr3161 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3163 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3165 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_XOR_ASSIGN_in_expr3177 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3179 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3181 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_MOD_ASSIGN_in_expr3193 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3195 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3197 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_BIT_SHIFT_RIGHT_ASSIGN_in_expr3209 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3211 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3213 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_SHIFT_RIGHT_ASSIGN_in_expr3225 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3227 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3229 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_SHIFT_LEFT_ASSIGN_in_expr3241 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3243 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3245 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_QUESTION_in_expr3257 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3259 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3261 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3263 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_LOGICAL_OR_in_expr3275 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3277 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3279 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_LOGICAL_AND_in_expr3291 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3293 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3295 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_OR_in_expr3307 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3309 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3311 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_XOR_in_expr3323 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3325 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3327 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_AND_in_expr3339 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3341 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3343 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_EQUAL_in_expr3355 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3357 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3359 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_NOT_EQUAL_in_expr3371 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3373 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3375 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_INSTANCEOF_in_expr3387 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3389 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000020000000L});
    public static final BitSet FOLLOW_type_in_expr3391 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_LESS_OR_EQUAL_in_expr3403 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3405 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3407 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_GREATER_OR_EQUAL_in_expr3419 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3421 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3423 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_BIT_SHIFT_RIGHT_in_expr3435 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3437 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3439 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_SHIFT_RIGHT_in_expr3451 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3453 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3455 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_GREATER_THAN_in_expr3467 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3469 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3471 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_SHIFT_LEFT_in_expr3483 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3485 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3487 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_LESS_THAN_in_expr3499 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3501 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3503 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_PLUS_in_expr3515 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3517 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3519 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_MINUS_in_expr3531 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3533 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3535 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_STAR_in_expr3547 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3549 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3551 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_DIV_in_expr3563 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3565 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3567 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_MOD_in_expr3579 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3581 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3583 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_UNARY_PLUS_in_expr3595 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3597 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_UNARY_MINUS_in_expr3609 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3611 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_PRE_INC_in_expr3623 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3625 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_PRE_DEC_in_expr3637 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3639 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_POST_INC_in_expr3651 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3653 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_POST_DEC_in_expr3665 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3667 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_NOT_in_expr3679 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3681 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_LOGICAL_NOT_in_expr3693 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_expr3695 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_CAST_EXPR_in_expr3707 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_type_in_expr3709 = new BitSet(new long[]{0x001FE1FFDF1CE370L,0x014A000890081020L,0x000007F0CB7D0000L});
    public static final BitSet FOLLOW_expr_in_expr3711 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_primaryExpression_in_expr3722 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_DOT_in_primaryExpression3748 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_primaryExpression_in_primaryExpression3766 = new BitSet(new long[]{0x2000000000000000L,0x0100000090000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_IDENT_in_primaryExpression3788 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_THIS_in_primaryExpression3810 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_SUPER_in_primaryExpression3832 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_innerNewExpression_in_primaryExpression3854 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_CLASS_in_primaryExpression3876 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_primitiveType_in_primaryExpression3912 = new BitSet(new long[]{0x2000000000000000L});
    public static final BitSet FOLLOW_CLASS_in_primaryExpression3914 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VOID_in_primaryExpression3932 = new BitSet(new long[]{0x2000000000000000L});
    public static final BitSet FOLLOW_CLASS_in_primaryExpression3934 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_parenthesizedExpression_in_primaryExpression3968 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_IDENT_in_primaryExpression3978 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_METHOD_CALL_in_primaryExpression3989 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_primaryExpression_in_primaryExpression3991 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L,0x0000000000000200L});
    public static final BitSet FOLLOW_genericTypeArgumentList_in_primaryExpression3993 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
    public static final BitSet FOLLOW_arguments_in_primaryExpression3996 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_explicitConstructorCall_in_primaryExpression4007 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ARRAY_ELEMENT_ACCESS_in_primaryExpression4018 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_primaryExpression_in_primaryExpression4020 = new BitSet(new long[]{0x0000000000000000L,0x4000000000000000L});
    public static final BitSet FOLLOW_expression_in_primaryExpression4022 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_literal_in_primaryExpression4033 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_newExpression_in_primaryExpression4043 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_THIS_in_primaryExpression4053 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_arrayTypeDeclarator_in_primaryExpression4063 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_SUPER_in_primaryExpression4073 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_THIS_CONSTRUCTOR_CALL_in_explicitConstructorCall4097 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_genericTypeArgumentList_in_explicitConstructorCall4099 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
    public static final BitSet FOLLOW_arguments_in_explicitConstructorCall4102 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_SUPER_CONSTRUCTOR_CALL_in_explicitConstructorCall4114 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_primaryExpression_in_explicitConstructorCall4116 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L,0x0000000000000200L});
    public static final BitSet FOLLOW_genericTypeArgumentList_in_explicitConstructorCall4119 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
    public static final BitSet FOLLOW_arguments_in_explicitConstructorCall4122 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_ARRAY_DECLARATOR_in_arrayTypeDeclarator4143 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_arrayTypeDeclarator_in_arrayTypeDeclarator4146 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_qualifiedIdentifier_in_arrayTypeDeclarator4150 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_primitiveType_in_arrayTypeDeclarator4154 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_STATIC_ARRAY_CREATOR_in_newExpression4178 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_primitiveType_in_newExpression4196 = new BitSet(new long[]{0x0000000000000000L,0x4004000000000000L});
    public static final BitSet FOLLOW_newArrayConstruction_in_newExpression4198 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_genericTypeArgumentList_in_newExpression4216 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000800000L});
    public static final BitSet FOLLOW_qualifiedTypeIdent_in_newExpression4219 = new BitSet(new long[]{0x0000000000000000L,0x4004000000000000L});
    public static final BitSet FOLLOW_newArrayConstruction_in_newExpression4221 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_CLASS_CONSTRUCTOR_CALL_in_newExpression4256 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_genericTypeArgumentList_in_newExpression4258 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000800000L});
    public static final BitSet FOLLOW_qualifiedTypeIdent_in_newExpression4261 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
    public static final BitSet FOLLOW_arguments_in_newExpression4263 = new BitSet(new long[]{0x0000000000000008L,0x0800000000000000L});
    public static final BitSet FOLLOW_classTopLevelScope_in_newExpression4265 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_CLASS_CONSTRUCTOR_CALL_in_innerNewExpression4288 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_genericTypeArgumentList_in_innerNewExpression4290 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000001000000000L});
    public static final BitSet FOLLOW_IDENT_in_innerNewExpression4293 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
    public static final BitSet FOLLOW_arguments_in_innerNewExpression4295 = new BitSet(new long[]{0x0000000000000008L,0x0800000000000000L});
    public static final BitSet FOLLOW_classTopLevelScope_in_innerNewExpression4297 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_arrayDeclaratorList_in_newArrayConstruction4322 = new BitSet(new long[]{0x0000000000000000L,0x0010000000000000L});
    public static final BitSet FOLLOW_arrayInitializer_in_newArrayConstruction4324 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_expression_in_newArrayConstruction4334 = new BitSet(new long[]{0x0000000000000002L,0x4004000000000000L});
    public static final BitSet FOLLOW_arrayDeclaratorList_in_newArrayConstruction4337 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ARGUMENT_LIST_in_arguments4358 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expression_in_arguments4360 = new BitSet(new long[]{0x0000000000000008L,0x4000000000000000L});
    public static final BitSet FOLLOW_set_in_literal0 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_switchCaseLabel_in_synpred1252828 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_expression_in_synpred1322929 = new BitSet(new long[]{0x0000000000000002L,0x4000000000000000L});

}